Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
19.04.2024, 02:09:54
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Поиск:
Расширенный поиск
Интересные и полезные статьи по работе с Excel и VBA можно найти в разделе
ХИТРОСТИ
33 242
Сообщений в
5 457
Тем от
6 758
Пользователей
Последний пользователь:
Сергей2662
Excel это не сложно
Основные форумы
Вопросы по Excel и VBA
Перебор контролов на листе и работа с формой пользователя
Страниц:
1
[
2
]
3
Все
Вниз
« предыдущая тема
следующая тема »
Автор
Тема: Перебор контролов на листе и работа с формой пользователя (Прочитано 14602 раз)
0 Пользователей и 1 Гость смотрят эту тему.
vikttur
Глобальный модератор
Ветеран
Репутация: +124/-0
Офлайн
Сообщений: 1 816
Re:Перебор контролов на листе и работа с формой пользователя
«
Ответ #15 :
20.04.2020, 15:35:17 »
Цитата: Andrew_Ko от 20.04.2020, 14:20:32
все свойства контрола (а не только Left, Top) надо продумать заранее и указать их в коде... если файл закрыть-открыть, то на форме ничего созданного не окажется!
Вариант1. Не заморачиваться с программированием формы. Расставить все по местам вручную. Убить на это вечер и забыть о головной боли...
Вариает2. Не заморачиваться с программированием формы. Тоже убить вечер и тоже забыть о пробеме - сделать "псевдо-форму" на листе. Вместо CheckBox - событие выделения ячейки и запись/удаление символа 80, 82, 252 (в шрифтах Wingdings это галка)
Вариант3. Продолжать программно рисовать форму, при этом не тратить вечер, но потратить в несколько раз больше времени на поиск решения своей проблемы
Записан
RAN
Эксперты
Старожил
Репутация: +43/-0
Офлайн
Сообщений: 440
Re:Перебор контролов на листе и работа с формой пользователя
«
Ответ #16 :
20.04.2020, 17:41:23 »
Цитата: vikttur от 20.04.2020, 15:35:17
Убить на это вечер
Ну ты и загнул.
Просто создать - минут пять. Выровнять еще 10, и правильно переименовать час.
Записан
А что ты умеешь?
Учиться...
Andrew_Ko
Новичок
Репутация: +0/-0
Офлайн
Сообщений: 48
Re:Перебор контролов на листе и работа с формой пользователя
«
Ответ #17 :
20.04.2020, 19:28:02 »
Цитата: Дмитрий Щербаков(The_Prist) от 20.04.2020, 14:29:11
... не раскрывает необходимости использования свойства Tag
Как задумывалось: при клике на чекбоксе он должен сообщить программе некое число, которое где-то надо хранить (вариант некой таблицы, Dictionary и т.п. не рассматривался)
Где можно хранить данные в контроле? В подписи, обесцветив шрифт или в Tag, что наиболее привычнее.
Насколько знаю, Dictionary, по сути, - обычный одномерный массив, и для его заполнения нужно иметь где-то таблицу-источник. Но поскольку интерфейс у меня "матрицообразный" - 10 рядов по 8 элементов, и в именах чекбоксов скрыта их позиция(cb11 - первый чек в первом ряду,cb68 - восьмой чек в шестом ряду и т.д.),тогда уж логичнее создать двумерный массив MyArr(10,8) и заполнять его из той же таблицы.
А можно послать... и массив, и словарь, а данные напрямую брать из той самой таблицы...
Записан
Andrew_Ko
Новичок
Репутация: +0/-0
Офлайн
Сообщений: 48
Re:Перебор контролов на листе и работа с формой пользователя
«
Ответ #18 :
20.04.2020, 19:30:30 »
Цитата: vikttur от 20.04.2020, 15:35:17
. Вместо CheckBox - событие выделения ячейки и запись/удаление символа 80, 82, 252 (в шрифтах Wingdings это галка)
Экзотика...
Записан
vikttur
Глобальный модератор
Ветеран
Репутация: +124/-0
Офлайн
Сообщений: 1 816
Re:Перебор контролов на листе и работа с формой пользователя
«
Ответ #19 :
20.04.2020, 19:33:58 »
Не нравится?
Наше дело - предложить варианты, Ваше - отказаться... или подумать.
Записан
Andrew_Ko
Новичок
Репутация: +0/-0
Офлайн
Сообщений: 48
Re:Перебор контролов на листе и работа с формой пользователя
«
Ответ #20 :
20.04.2020, 20:49:19 »
Цитата: vikttur от 20.04.2020, 19:33:58
Наше дело - предложить варианты...
Вариант 3 наиболее привлекателен с точки зрения - "поломать голову", но он бессмысленный, если мне кто-то наконец прямо ответит: "
в случае с формой, заполнить её программно и
сохранить
результат невозможно !!!
а где же Вариант 4 - плюнуть на форму, создать контролы на листе, а проблему с отсутствующим Tag реализовать использованием скрытой таблицы(см. выше)?
P.S. и где ответ на моё сообщение в личку?
Записан
vikttur
Глобальный модератор
Ветеран
Репутация: +124/-0
Офлайн
Сообщений: 1 816
Re:Перебор контролов на листе и работа с формой пользователя
«
Ответ #21 :
20.04.2020, 22:46:05 »
Вариант3 описал только потому, что Вы без него жить не можете
И по нему такой ответ: программно создать форму и ее наполнение можно, но сохранить программно созданную форму нельзя.
Вариант4 не предлагаю, т.к., по моему мнению, хуже он двух первых. Зачем лишние объекты на листе, вес, возня с их привязкой?
Да, еще был неплохой Вариант0 (
ListBox
) который Вы сразу отвергли, ибо "
нарушится вся логика интерфейса
"... Не знаю, какая там логика... У меня никогда не было проблемы с размещением списков в
ListBox
вместо большого количества флажков. Но если Вы считаете, что интерфейс менять ни в коем случае нельзя, переубеждать не буду.
В личке ответил
«
Последнее редактирование: 20.04.2020, 22:58:38 от vikttur
»
Записан
Andrew_Ko
Новичок
Репутация: +0/-0
Офлайн
Сообщений: 48
Re:Перебор контролов на листе и работа с формой пользователя
«
Ответ #22 :
21.04.2020, 00:44:02 »
Цитата: vikttur от 20.04.2020, 22:46:05
Не знаю, какая там логика...
Логика проста, как 3 копейки: пользователь открывает матричнообразную форму 10х8, где ряды поименованы как "Сущность 1"..."Сущность 10", а столбцы - "Этап 1"..."Этап 8".
Каждый чекбокс на пересечении связан с неким числовым значением. Общий смысл: вложение этих числовых значений в каждое сочетание
Сущность
/
Этап
. Заполнение этапов строго последовательно. Т.е. варианты "...да, да, нет, да..." или ..."нет", "нет", "да..." - невозможны: изменяемый чек переписывает весь ряд.
Алгоритм этого изменения:
установленный
чекбокс устанавливает и все чекбоксы
левее
себя (нельзя вложить в Этап 4, не вложив в предыдушие 3),
сброшенный
- сбрасывает и все чекбоксы
правее
себя (если изъять вложения из Этапа 6, то они попадают в "Резерв" и из последующих двух этапов).
Соответственно,установленные сброшенные чекбоксы увеличивают/уменьшают общую сумму.
И куда тут присобачить ListBox?
Записан
vikttur
Глобальный модератор
Ветеран
Репутация: +124/-0
Офлайн
Сообщений: 1 816
Re:Перебор контролов на листе и работа с формой пользователя
«
Ответ #23 :
21.04.2020, 01:34:53 »
Откуда знать, куда, если задача не видна? По такому описанию все равно задачу целостно не понять.
Да, с ListBox могу ошибаться. Но, может, и 80 флажков - перебор и подход может быть другим?
Мы ушли далеко в сторону. По самой теме советы даны и вряд ли новые, если будут, кардинально поменяют картину. Я бы выбрал вариант1 или вариант2
А если будет желание обсудить сам подход к задаче, а не выбранный путь решения - создавайте тему с описанием задачи.
«
Последнее редактирование: 21.04.2020, 01:37:59 от vikttur
»
Записан
Andrew_Ko
Новичок
Репутация: +0/-0
Офлайн
Сообщений: 48
Re:Перебор контролов на листе и работа с формой пользователя
«
Ответ #24 :
21.04.2020, 01:57:43 »
Цитата: vikttur от 21.04.2020, 01:34:53
Мы ушли далеко в сторону
Так, возврашайтесь...
Я описал задачу предельно просто, что ешё не понятно?
Записан
vikttur
Глобальный модератор
Ветеран
Репутация: +124/-0
Офлайн
Сообщений: 1 816
Re:Перебор контролов на листе и работа с формой пользователя
«
Ответ #25 :
21.04.2020, 03:24:40 »
В этой теме - перебор контролов. И здесь советы по этому вопросу. Обсуждать задачу, для которой Вы приспосабливаете этот перебор, - в другой теме.
Записан
Andrew_Ko
Новичок
Репутация: +0/-0
Офлайн
Сообщений: 48
Re:Перебор контролов на листе и работа с формой пользователя
«
Ответ #26 :
21.04.2020, 12:23:54 »
Так был вопрос: "Не знаю, какая там логика...", пришлось отвечать
Я же воспитанный человек. Не спросили бы - не описывал бы...
Записан
Дмитрий Щербаков(The_Prist)
Администратор
Ветеран
Репутация: +485/-0
Офлайн
Сообщений: 5 831
Re:Перебор контролов на листе и работа с формой пользователя
«
Ответ #27 :
21.04.2020, 12:35:13 »
Цитата: Andrew_Ko от 21.04.2020, 00:44:02
И куда тут присобачить ListBox?
Один никуда. А вот 8, с 10-ю флажками...
Это тоже как вариант.
А ответы-то по сути все даны давно: если использовать ActiveX - то вместо Tag либо записывать в ячейки, либо в словарь(повторю, это специальный объект).
Если использовать форму: то либо заранее на ней создать все нужные флажки, либо для создаваемой формы все прописать так же на листе и оттуда дергать при каждом запуске.
Ну и чтобы было понятно, почему накидывают варианты, которые Вам кажутся неприемлемыми, а может и тупыми местами: мы вообще не видим что там за этапы, задачи, что правее и левее и т.п. Т.е. мы картину целиком не улавливаем и представить это все по Вашим одним описаниям очень сложно. Вы, например, сможете по описанию представить себе вкус молока или шоколада?
Ну вот примерно так же мы сейчас по Вашим описаниям понимаем суть Вашей задачи.
Так что остается только выбирать что больше по душе
«
Последнее редактирование: 21.04.2020, 12:38:01 от Дмитрий Щербаков(The_Prist)
»
Записан
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Пункты приёма Спасибов:
-
41001332272872
-
R298726502453
Andrew_Ko
Новичок
Репутация: +0/-0
Офлайн
Сообщений: 48
Re:Перебор контролов на листе и работа с формой пользователя
«
Ответ #28 :
21.04.2020, 14:35:06 »
Цитата: Дмитрий Щербаков(The_Prist) от 21.04.2020, 12:35:13
мы картину целиком не улавливаем
Сейчас опять на меня
vikttur
наедет, что моё сообщение - не по теме
...
Обычная таблица! Столбцы - этапы, строки - сущности, стоимость каждой сущности по этапам хранится в справочнике(то, что я хотел в Tag хранить). Текущей стоимостью каждой сущности можно управлять устанавливая/сбрасывая флажки в её ряду. В поле (пока не упоминалось) выводится что-то типа: "Всего вложено в сущности", где хранится общая сумма по всей таблице...
...попробую вариант вообще без чекбоксов: на пересечении в ячейках хранить те самые стоимости по этапам, а выбранную ячейку обозначать изменением её фона.
Записан
Andrew_Ko
Новичок
Репутация: +0/-0
Офлайн
Сообщений: 48
Re:Перебор контролов на листе и работа с формой пользователя
«
Ответ #29 :
22.04.2020, 11:21:43 »
Попробовал этот вариант:
Цитата: vikttur от 20.04.2020, 15:35:17
Вместо CheckBox - событие выделения ячейки и запись/удаление символа 80, 82, 252 (в шрифтах Wingdings это галка)
с небольшим изменением: переключаю фон выделенной ячейки, но столкнулся с проблемой: выделенная при первом клике ячейка так и остаётся выделенной и повторный клик на ней события SelectionChange уже не вызывает.
Принудительное выделение в конце процедуры "ненужной ячейки"
Код: (vb)
Cells(1, 1).Select
первую проблему снимает, но добавляет новую: эта первая ячейка теперь синхронно стала изменять свой фон при каждом клике на листе. Некрасиво...
Пришлось в коде принудительно отсекать обработку события SelectionChange для первой ячейки, вот код целиком:
Код:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Address = "$A$1" Or Target.Count > 1 Then Exit Sub
If Target.Cells.Interior.ThemeColor = 6 Then
Target.Cells.Interior.ThemeColor = 1
Else
Target.Cells.Interior.ThemeColor = 6
End If
Cells(1, 1).Select
End Sub
изменение фона первой ячейки пропало но она всё-равно "подмигивает" при клике на любой ячейке листа...зараза!
«
Последнее редактирование: 22.04.2020, 17:14:57 от vikttur
»
Записан
Страниц:
1
[
2
]
3
Все
Вверх
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Правила форума и вопросы по работе форума
-----------------------------
=> ОБЩИЕ ПРАВИЛА ФОРУМА
=> ВОПРОСЫ ПО РАБОТЕ ФОРУМА
-----------------------------
Основные форумы
-----------------------------
=> Вопросы по Excel и VBA
=> PowerQuery, PowerPivot, PowerBI и запросы
=> Вопросы по Word и VBA
=> Вопросы по Outlook и VBA
=> Вопросы по Access и VBA
=> Вопросы по PowerPoint и VBA
=> Вопросы по Office для MAC
=> Вопросы по работе в Google-таблицах
=> Полезные решения
=> Баги и глюки при работе с Excel и VBA
=> Вопросы по OpenOffice и LibreOffice
=> Вопросы по надстройке MulTEx
=> Вопросы по MyAddin
=> Вопросы по бесплатным надстройкам
=> Вопросы по программам
-----------------------------
Прочие форумы
-----------------------------
=> Заказы на написание макросов, работа для специалистов по Excel и VBA и пр.
=> Курилка
-----------------------------
Удаленные темы и сообщения
-----------------------------
=> Список удаленных
Загружается...