Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Сохранение в класс модуле боксов разных типов - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Сохранение в класс модуле боксов разных типов
ZetMenChavo Дата: Среда, 12.07.2023, 14:30 | Сообщение № 1
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 159
Репутация: 7 ±
Замечаний: 0% ±

Excel 2010
Здравствуйте.
В пользовательской форме, что я сейчас делаю, должна быть возможность проверки заполненности и включения всех обязательных полей и переключателей.
Что бы не прописывать макрос для каждого бокса (а их планируется не мало), я решил загнать их в класс модуль, чтоб через него отслеживать в каких боксах проводились изменения.
Как загонять однотипные боксы, я знаю. В примере это рабочая версия UserForm1 и связанный с ней Class1.
Группировка боксов по типу конечно облегчает работу, но хотелось бы и дальше зайти, а именно загнать все боксы разных типов в одну переменную, что бы в класс модуле прописать лишь один макрос реагирующий на изменение как в примере UserForm2 и Class2. Вот тут и возникла проблема.
Если с однотипными боксами указать переменную легко, просто записав As MSForms.[тип бокса],
[vba]
Код
Public WithEvents №№_TxBx As MSForms.TextBox
Public WithEvents №№_CmBx As MSForms.ComboBox
Public WithEvents №№_TgBt As MSForms.ToggleButton
[/vba]
то что нужно писать для смешанных типов, я найти в инете не смог.

Помогите сделать UserForm2 работающим как задумано.
К сообщению приложен файл: forma.xlsm (17.7 Kb)
 
Ответить
СообщениеЗдравствуйте.
В пользовательской форме, что я сейчас делаю, должна быть возможность проверки заполненности и включения всех обязательных полей и переключателей.
Что бы не прописывать макрос для каждого бокса (а их планируется не мало), я решил загнать их в класс модуль, чтоб через него отслеживать в каких боксах проводились изменения.
Как загонять однотипные боксы, я знаю. В примере это рабочая версия UserForm1 и связанный с ней Class1.
Группировка боксов по типу конечно облегчает работу, но хотелось бы и дальше зайти, а именно загнать все боксы разных типов в одну переменную, что бы в класс модуле прописать лишь один макрос реагирующий на изменение как в примере UserForm2 и Class2. Вот тут и возникла проблема.
Если с однотипными боксами указать переменную легко, просто записав As MSForms.[тип бокса],
[vba]
Код
Public WithEvents №№_TxBx As MSForms.TextBox
Public WithEvents №№_CmBx As MSForms.ComboBox
Public WithEvents №№_TgBt As MSForms.ToggleButton
[/vba]
то что нужно писать для смешанных типов, я найти в инете не смог.

Помогите сделать UserForm2 работающим как задумано.

Автор - ZetMenChavo
Дата добавления - 12.07.2023 в 14:30
mgt Дата: Среда, 12.07.2023, 15:15 | Сообщение № 2
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 102
Репутация: 26 ±
Замечаний: 0% ±

Excel 2010
Весьма странно, что "контролов планируется не мало", а создаете вы их при этом вручную.
И чтобы не прописывать макрос для каждого бокса можно написать 1 для всех:
[vba]
Код

For Each c_ In Me.Controls

next
[/vba]
 
Ответить
СообщениеВесьма странно, что "контролов планируется не мало", а создаете вы их при этом вручную.
И чтобы не прописывать макрос для каждого бокса можно написать 1 для всех:
[vba]
Код

For Each c_ In Me.Controls

next
[/vba]

Автор - mgt
Дата добавления - 12.07.2023 в 15:15
ZetMenChavo Дата: Среда, 12.07.2023, 16:01 | Сообщение № 3
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 159
Репутация: 7 ±
Замечаний: 0% ±

Excel 2010
mgt, так тут для примера сделал простенькую форму. В основной контролы будут оформляться: разные размеры, расцветки, списки, кнопки. В ручную их будет проще сделать чем макросом прописывать индивидуальные оформления.

Да и ваш совет
Цитата
написать 1 для всех
похоже не дописан. Вы показали пустой цикл For для контролов. Как это должно реагировать на изменения в контролах?


Сообщение отредактировал ZetMenChavo - Среда, 12.07.2023, 16:37
 
Ответить
Сообщениеmgt, так тут для примера сделал простенькую форму. В основной контролы будут оформляться: разные размеры, расцветки, списки, кнопки. В ручную их будет проще сделать чем макросом прописывать индивидуальные оформления.

Да и ваш совет
Цитата
написать 1 для всех
похоже не дописан. Вы показали пустой цикл For для контролов. Как это должно реагировать на изменения в контролах?

Автор - ZetMenChavo
Дата добавления - 12.07.2023 в 16:01
mgt Дата: Четверг, 13.07.2023, 14:00 | Сообщение № 4
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 102
Репутация: 26 ±
Замечаний: 0% ±

Excel 2010
проверки заполненности и включения всех обязательных полей и переключателей

Ну например при нажатии кнопки "Ок" проверить все контролы, и если пусто/ненажато - вернуть на доработку.
 
Ответить
Сообщение
проверки заполненности и включения всех обязательных полей и переключателей

Ну например при нажатии кнопки "Ок" проверить все контролы, и если пусто/ненажато - вернуть на доработку.

Автор - mgt
Дата добавления - 13.07.2023 в 14:00
ZetMenChavo Дата: Четверг, 13.07.2023, 15:38 | Сообщение № 5
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 159
Репутация: 7 ±
Замечаний: 0% ±

Excel 2010
mgt, вы похоже не поняли суть проблемы. Вопрос не в том, как реализовать отслеживание в контролерах (ибо я уже сделал начальный код для этого в примере UserForm1 и Class1), а как улучшить этот код загнав разнотипные контролеры в одну переменную в класс модуле тем самым избавившись от нагромождения строк кода, т.е. сделать пример UserForm2 и Class2 работающим.
 
Ответить
Сообщение mgt, вы похоже не поняли суть проблемы. Вопрос не в том, как реализовать отслеживание в контролерах (ибо я уже сделал начальный код для этого в примере UserForm1 и Class1), а как улучшить этот код загнав разнотипные контролеры в одну переменную в класс модуле тем самым избавившись от нагромождения строк кода, т.е. сделать пример UserForm2 и Class2 работающим.

Автор - ZetMenChavo
Дата добавления - 13.07.2023 в 15:38
ZetMenChavo Дата: Четверг, 13.07.2023, 16:08 | Сообщение № 6
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 159
Репутация: 7 ±
Замечаний: 0% ±

Excel 2010
Чуть дописал код в формах чтоб было видно, как работает система отслеживания изменений.
Первая форма сильно обрезанная от основной, но суть процесса передаёт. В основной контролеров больше, имеют другие имена (не стандартные типа Label, TextBox и т.д.) и дополнительно для некоторых нужно ещё доп.условия прописывать.
Вторая форма помогла бы мне упростить код, но она не работает так как задумано.
И в этом состоит вопрос: можно ли заставить вторую форму работать, если да то как?
К сообщению приложен файл: forma2.xlsm (25.0 Kb)


Сообщение отредактировал ZetMenChavo - Четверг, 13.07.2023, 16:11
 
Ответить
СообщениеЧуть дописал код в формах чтоб было видно, как работает система отслеживания изменений.
Первая форма сильно обрезанная от основной, но суть процесса передаёт. В основной контролеров больше, имеют другие имена (не стандартные типа Label, TextBox и т.д.) и дополнительно для некоторых нужно ещё доп.условия прописывать.
Вторая форма помогла бы мне упростить код, но она не работает так как задумано.
И в этом состоит вопрос: можно ли заставить вторую форму работать, если да то как?

Автор - ZetMenChavo
Дата добавления - 13.07.2023 в 16:08
mgt Дата: Четверг, 13.07.2023, 16:52 | Сообщение № 7
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 102
Репутация: 26 ±
Замечаний: 0% ±

Excel 2010
загнав разнотипные контролеры в одну переменную

Как это сделать я не знаю. Но даже если у вас это получится, то все равно придется из этой переменной их при проверке достать, определить тип, и обработать.

На вашем месте я бы создавал все объекты динамически, через цикл. Присваивал им имена, по принципу первый ряд - комбо11, текст11, текст21, тогл11, второй ряд - комбо12, текст12, текст22, тогл12. Хоть тыщу рядов. И проверка в цикле по рядам.
 
Ответить
Сообщение
загнав разнотипные контролеры в одну переменную

Как это сделать я не знаю. Но даже если у вас это получится, то все равно придется из этой переменной их при проверке достать, определить тип, и обработать.

На вашем месте я бы создавал все объекты динамически, через цикл. Присваивал им имена, по принципу первый ряд - комбо11, текст11, текст21, тогл11, второй ряд - комбо12, текст12, текст22, тогл12. Хоть тыщу рядов. И проверка в цикле по рядам.

Автор - mgt
Дата добавления - 13.07.2023 в 16:52
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!