Пользовательские формы VBA снова и снова показывают одну и ту же пользовательскую форму

в настоящее время я программирую макрос excel. Макрос отображает Userform. В Userform пользователь может выбрать что-то. После того, как Пользователь выбрал что-то, я вызываю Userform.Hide, чтобы скрыть пользовательскую форму и прочитать выбор из формы. После того, как выбор был прочитан, я вызываю «Разгружать пользовательскую форму». Теперь код взаимодействует с выбором. Я хочу сделать это в цикле, но когда код попытается показать Userform во второй раз. Я получаю исключение, что форма уже отображается. Я не могу это понять, потому что я назвал Unload Userform. Когда я делаю это в режиме отладки, все работает так, как должно.

Код пользовательской формы

Private Sub Image1_Click() SelectCard 1 End Sub Private Sub Image2_Click() SelectCard 2 End Sub Private Sub SelectCard(number As Integer) SelectedNumber = number Me.Hide End Sub Public Sub CardSelector_Activate(Cards As Cards) Dim c As card For Each Key In Cards.CardDictionary.Keys Set c = Cards.CardDictionary.Items(Key - 1) If c.value = 1 And c.played Then Image1.Enabled = False End If If c.value = 2 And c.played Then Image2.Enabled = False End If Next Key number = SelectedNumber CardSelector.Show End Sub 

Код в ClassModule я называю это в цикле

  Sub Costum(Spalte As Integer, Zeile As Integer, SpalteBeginn As Integer, Cards As Cards, CardsOpponent As Cards) CardSelector.CardSelector_Activate Cards Dim c As card Dim number As Integer number = CardSelector.SelectedNumber Set c = Cards.CardDictionary.Items(CardSelector.SelectedNumber - 1) SetCardAsPlaced c, Zeile, Spalte, SpalteBeginn Unload CardSelector End Sub 

Может ли кто-нибудь помочь мне здесь?

Я не уверен, полностью ли понимаю вашу проблему, но так я вызываю форму с помощью VBA. Предполагается, что у вас есть кнопка « Отмена» и « ОК» :

В виде:

 Option Explicit Private m_ResultCode As VbMsgBoxResult Private Sub btnCancel_Click() Call CloseWithResult(vbCancel) End Sub Private Sub btnOK_Click() ' Store form control values to member variables here. Then ... Call CloseWithResult(vbOK) End Sub Private Sub CloseWithResult(Value As VbMsgBoxResult) m_ResultCode = Value Me.Hide End Sub Public Function ShowMe(Optional bNewLayerOptions As Boolean = True) As VbMsgBoxResult ' Set Default to Cancel m_ResultCode = vbCancel ' Execution will pause here until the form is Closed or Unloaded Call Me.Show(vbModal) ' Return Result ShowMe = m_ResultCode End Function 

Затем, чтобы назвать это (обратите внимание, что frmLayers – это мой собственный объект формы VBA – вы бы использовали свои):

 Dim dlgLayers As New frmLayers If (dlgLayers.ShowMe(False) = vbOK) Then ' Proceeed End If 

Помогает ли вам эта проблема? Прошу прощения, если я неправильно понял, и я удалю свой ответ, если потребуется.

Такие вещи, как xxxxx_Activate и т. Д., Являются обработчиками событий, вызываемыми инфраструктурой. Так, например, есть событие для активации и событие для инициализации. Обычно вам не нужно напрямую обращаться к ним, если вы правильно настроили код. См. https://support.microsoft.com/en-us/kb/138819 .

  • xlsx to csv: формат даты изменился с DD.MM.YYYY на DD.MM.YY
  • Обновить пользовательскую форму со значениями в диапазоне
  • Excel: изменение форматов даты
  • Форматирование даты в Excel
  • Преобразование местоположения
  • Ячейки формата Excel на основе смежной ячейки
  • Можно ли добавить строку в таблицу, а затем отформатировать ее?
  • Форматирование текстовой ячейки на основе ячейки с номерами
  • Userform VBA для копирования значения в ячейки
  • Передайте значение текстового поля UserForm в ячейку
  • Получение информации о цвете темы из серии диаграмм
  • Interesting Posts

    Как импортировать файл Excel в базу данных mysql из PHP

    Почему R не позволяет мне менять мой рабочий каталог?

    VBA Для каждого цикла несколько диапазонов

    Начальные проблемы с Excel Macro VBA

    Автоматизация процесса обновления данных SQL в Excel через VBScript на сервере

    Объединение двух столбцов в Excel VB Macro в столбец во второй таблице

    Excel VBA Application.OnTime. Я думаю, что это плохая идея использовать это … мысли в любом случае?

    Excel Macro: почему это не будет сохранено в правильном каталоге?

    Защита паролем всех листов в Excel при открытии независимо от имени?

    Список VBA будет помещен в формат наклейки

    Как настроить запуск макроса каждый раз, когда сообщение электронной почты поступает в определенную подпапку в Outlook 2007?

    C # Импорт текста из текстового поля winform в выбранный диапазон в уже открытой книге Excel

    Open_Workbook Routine Works вручную, но не автоматически

    Как я могу избежать COMException при добавлении нескольких рабочих листов в книгу с помощью c # excel introp?

    docx4j / xlsx4j: создать простую таблицу

    Давайте будем гением компьютера.