Не удается закрыть пользовательскую форму
Позвольте мне настроить среду.
Это код VBA, запущенный в Excel.
У меня есть пользовательская форма, содержащая msflexgrid. Этот flexgrid показывает список клиентов и клиентов, продавцов, csr, mfg rep и территорий, присвоений. Когда вы нажимаете в столбце, скажем, в столбце Territory, открывается другая пользовательская форма, чтобы отобразить список территорий. Затем вы выбираете территорию по вашему выбору, пользовательская форма исчезает, а новая территория занимает место старой территории.
- Несколько пользователей для пользовательской формы Excel VBA
- деактивировать пользовательскую форму Excel VBA
- Ошибка функции USERFORM
- Заполнение ComboBox со списком диаграмм на листе
- vba сетка информации о пользовательской форме vba в ярлыке
Все это отлично работает, пока вы не нажмете на выбранную вами территорию. Пользовательская форма «Территория» не исчезнет (она мерцает), и новая территория не передает базовую пользовательскую форму.
Я должен упомянуть, что когда я перехожу через код, он отлично работает.
Я предполагаю, что с чем-то это связано с flexgrid, так как все остальные пользовательские формы (у которых нет flexgrids), которые отлично открывают пользовательскую форму.
Ниже приведен пример кода:
** Нажмите событие из flexgrid, которое показывает форму пользователя Territory и присвоение новой территории при закрытии пользовательской формы территории.
Private Sub FlexGrid_Customers_Click() With FlexGrid_Customers Select Case .Col Case 0 Case 2 Case 4 Case 6 UserForm_Territories.Show Case Else End Select If Len(Trim(Misc1)) > 0 Then .TextMatrix(.Row, .Col) = Trim(Misc1) .TextMatrix(.Row, .Col + 1) = Trim(Misc2) End If End With End Sub
** В пользовательской форме Territory используются следующие Subs
Private Sub UserForm_Activate() Misc1 = "" Misc2 = "" ListBox_Territory.Clear Module_Get.Territories End Sub Private Sub UserForm_Terminate() Set UserForm_Territories = Nothing End Sub Private Sub ListBox_Territory_Click() With ListBox_Territory Misc1 = Trim(.List(.ListIndex, 0)) Misc2 = Trim(.List(.ListIndex, 1)) End With Hide UserForm_Terminate End Sub
Я знаю это долгое объяснение, но я довольно приличный программист VBA, и это меня озадачило.
Любая помощь будет принята с благодарностью.
- Добавление изображения в рабочий лист из пользовательской формы (excel vba)
- Проблема моделирующей пользовательской формы Excel
- Заполнение Combobox на второй пользовательской форме
- Как вставить изображение из Интернета в форму VBA Excel Userform
- Динамическое название диаграммы из пользовательской формы
- Использование операторов IF & AND с флажками в пользовательской форме
- Скрыть строки на основе пользовательской формы
- Excel VBA Userform IIf (IsDate) не сохраняет пробел
Я не собираюсь говорить, что вы делаете неправильно (в том, что он никогда не будет работать), но это пугает меня. Это не так, как я имел дело с формами.
Во-первых, вы используете UserForm_Territories
(имя класса / формы) для ссылки на неявно созданный экземпляр формы. Это то, чего я всегда избегал делать. Я всегда создавал экземпляр формы явно, поэтому вместо:
UserForm_Territories.Show
Я бы сделал:
Dim oTerritoriesForm As UserForm_Territories Set oTerritoriesForm = New UserForm_Territories oTerritoriesForm.Show vbModal ' get the values from the form here Unload oTerritoriesForm
Далее, и гораздо более тревожно, вы подрываете поведение UserForm_Terminate, вызывая его явно. Почему вы делаете это, я не могу себе представить, если вы не подумали, что это будет работать вокруг вашей заявленной проблемы. Мой совет: не делай этого.
Хуже того, вы пытаетесь назначить неявно созданный экземпляр формы внутри этого метода Terminate. Вы тоже не должны этого делать. Я удивлен, что даже компилируется.
Похоже, вы пытаетесь заставить неявно созданный экземпляр формы имитировать явно созданный. В этом случае создайте его явно, как показано выше.