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

Вход

Регистрация

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

 

= Мир MS Excel/Единый вход в UserForm - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин  
Единый вход в UserForm
Skif-F Дата: Пятница, 24.04.2015, 00:45 | Сообщение № 1
Группа: Проверенные
Ранг: Участник
Сообщений: 73
Репутация: 14 ±
Замечаний: 0% ±

Excel 2007, 2010, 2013, 2016
Хочу поднять для обсуждения один очень интересный вопрос, который возник из собственного опыта и наблюдений за применением пользовательских форм (UserForm) в VBA.

Стандартный способ применения UserForm заключается в следующем: по всему коду программы разбросаны обращения к элементам формы, и где-то в конце концов появляется долгожданное Show, после чего вызванная форма, используя переменные из других модулей программы, начинает работу. В случае внесения изменений и доработок в программу, начинается мучительный поиск обращений к элементам формы и корректировка этих обращений. Так же выглядит адаптация чьей-то формы или программы под свои нужды - необходимо лопатить множество строк кода, выискивая, где формируется значение того или иного элемента управления.

Я хочу предложить несколько иной вариант применения UserForms.
В своих проектах я считаю форму "чёрным ящиком", о котором вся остальная программа знает только имя и точку входа.
За точку входа я принимаю функцию:
[vba]
Код
Public Function NewShow(разные параметры) as КакойТоТип
[/vba]
Тип функции и её параметры зависят от назначения UserForm, и, по сути, стандартизированы быть не могут. Чаще всего тип функции - Boolean, имитирующий нажатие кнопок <Принять> (True) и <Отмена> (False), а большинство необходимых данных возвращаются в параметры, переданные по ссылке. Но никто не мешает применять тот же VbMsgBoxResult или просто String (пустая строка - <Отмена>) и т.п., а также вообще ничего не возвращать (благо, VBA позволяет вызывать функцию как метод, без применения значения).

Внутренняя структура входной функции выглядит примерно так:
[vba]
Код
Public Function NewShow(разные параметры) as КакойТоТип
       применение параметров к элементам формы
       Me.Show НеобходимаяМодальность
       формирование результата
End Function
[/vba]
Принятие несколько лет назад этого метода на вооружение сэкономило мне множество сил по доработке и переработке проектов (особенно крупных), когда я мог изменять форму под новые требования, не оглядываясь на остальную программу и не вспоминая элементы, на которые есть ссылки из других частей программы.

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

Как пример оформления пользовательской формы по этому правилу могу предложить доработанный мной календарик из соответствующей темы


Сообщение отредактировал Skif-F - Пятница, 24.04.2015, 00:54
 
Ответить
СообщениеХочу поднять для обсуждения один очень интересный вопрос, который возник из собственного опыта и наблюдений за применением пользовательских форм (UserForm) в VBA.

Стандартный способ применения UserForm заключается в следующем: по всему коду программы разбросаны обращения к элементам формы, и где-то в конце концов появляется долгожданное Show, после чего вызванная форма, используя переменные из других модулей программы, начинает работу. В случае внесения изменений и доработок в программу, начинается мучительный поиск обращений к элементам формы и корректировка этих обращений. Так же выглядит адаптация чьей-то формы или программы под свои нужды - необходимо лопатить множество строк кода, выискивая, где формируется значение того или иного элемента управления.

Я хочу предложить несколько иной вариант применения UserForms.
В своих проектах я считаю форму "чёрным ящиком", о котором вся остальная программа знает только имя и точку входа.
За точку входа я принимаю функцию:
[vba]
Код
Public Function NewShow(разные параметры) as КакойТоТип
[/vba]
Тип функции и её параметры зависят от назначения UserForm, и, по сути, стандартизированы быть не могут. Чаще всего тип функции - Boolean, имитирующий нажатие кнопок <Принять> (True) и <Отмена> (False), а большинство необходимых данных возвращаются в параметры, переданные по ссылке. Но никто не мешает применять тот же VbMsgBoxResult или просто String (пустая строка - <Отмена>) и т.п., а также вообще ничего не возвращать (благо, VBA позволяет вызывать функцию как метод, без применения значения).

Внутренняя структура входной функции выглядит примерно так:
[vba]
Код
Public Function NewShow(разные параметры) as КакойТоТип
       применение параметров к элементам формы
       Me.Show НеобходимаяМодальность
       формирование результата
End Function
[/vba]
Принятие несколько лет назад этого метода на вооружение сэкономило мне множество сил по доработке и переработке проектов (особенно крупных), когда я мог изменять форму под новые требования, не оглядываясь на остальную программу и не вспоминая элементы, на которые есть ссылки из других частей программы.

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

Как пример оформления пользовательской формы по этому правилу могу предложить доработанный мной календарик из соответствующей темы

Автор - Skif-F
Дата добавления - 24.04.2015 в 00:45
  • Страница 1 из 1
  • 1
Поиск:

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