Я начал применять эти приемы и только сейчас начинаю ценить этот ответ настолько, насколько он этого заслуживает. Спасибо большое!

ли недостатки при помещении кода в пользовательскую форму VBA вместо «нормального» модуля?

Это может быть простой вопрос, но я не нашел окончательного ответа на него при поиске в Интернете и в стеке.

Фон: Я разрабатываю Front-End приложение базы данных в Excel-VBA. Для выбора разных фильтров у меня разные пользовательские формы. Я спрашиваю, какой общий дизайн программы лучше:(1) помещение структуры управления в отдельный модуль ИЛИ ЖЕ(2) размещение кода для следующей пользовательской формы или действия в пользовательской форме.

Давайте сделаем пример. У меня есть кнопка Active-X, которая запускает мои фильтры и мои формы.

Вариант1: Модули

В CommandButton:

Private Sub CommandButton1_Click()
  call UserInterfaceControlModule
End Sub

В модуле:

Sub UserInterfaceControllModule()
Dim decisionInput1 As Boolean
Dim decisionInput2 As Boolean

UserForm1.Show
decisionInput1 = UserForm1.decision

If decisionInput1 Then
  UserForm2.Show
Else
  UserForm3.Show
End If

End Sub

В варианте 1 управляющая структура находится в обычном модуле. И решения о том, какую пользовательскую форму показывать следующим, отделены от пользовательской формы. Любая информация, необходимая для принятия решения о том, какую пользовательскую форму показывать следующим, должна быть извлечена из пользовательской формы.

Вариант2: пользовательская форма

В CommadButton:

Private Sub CommandButton1_Click()
  UserForm1.Show
End Sub

В пользовательской форме1:

Private Sub ToUserform2_Click()
  UserForm2.Show
  UserForm1.Hide
End Sub

Private Sub UserForm_Click()
  UserForm2.Show
  UserForm1.Hide
End Sub

Во втором варианте структура управления находится непосредственно в пользовательских формах, и каждая пользовательская форма имеет инструкции о том, что следует за ней.

Я начал разработку с использованием метода 2. Если это было ошибкой и у этого метода есть серьезные недостатки, я хочу узнать его скорее раньше, чем позже.

Ответы на вопрос(1)

Ваш ответ на вопрос