Excel – VBA: передать переменную от Sub до Userform
Я прочитал и применил решение, которое я нашел по подобным темам, но в моем случае ничего не работает.
Итак, я хочу передать переменную из одной части моего модуля1 в пользовательскую форму. Это строка под названием "provinceSugg".
Вот соответствующая часть моего кода:
- Экземпляр контекстного меню Excel VBA
- Пользовательская форма и несколько изображений
- excel vba userforms: пользовательский тип не определен
- excel userform - переменная set / reset для определения / использования кадра
- VBA Как проверить, существуют ли значения пользовательской формы combobox в базе данных
Public provinceSugg As String Sub probaCity() [...] If province = "" And city <> "" Then provinceSugg = sCurrent.Cells(p, db_column).Offset(0, 1).Value UserForm2.Label1 = "Do you mean " & city & " in " & provinceSugg & " ?" UserForm2.Label1.TextAlign = fmTextAlignCenter UserForm2.Show Else End If End Sub
И затем в моем пользовательском коде:
Private Sub userformBtn1_Click() MsgBox provinceSugg sMain.Range("J6").Value = provinceSugg End Sub
Когда я запускаю свою программу:
1 / У меня есть содержимое областиSugg, показывающее в MsgBox, вызванном из моего субпользователя (так что существует провинцияSugg, это не пустая переменная).
2 / MsgBox, вызванный из пользовательской формы, пуст (поэтому передача значения не удалась), и моя программа вылетает при запуске «sMain.Range (« J6 »). Value = provinceSugg« с чем-то вроде «Ошибка 424 Object Required» (поэтому переменная не удалось передать пользовательскую форму).
Я пробовал все, что я нашел на форуме, и здесь (разные способы указать, что провинция является общедоступной переменной, но все еще сбой …).
Заранее спасибо за вашу помощь !
- Измените пользовательскую форму для работы с несколькими листами
- Как загрузить данные в Excel Userform Listbox из формы Access напрямую?
- Функция не записывает в требуемую ячейку следующий расчет массива; Пользовательские формы excel vba
- Автоматизировать идентификатор с помощью пользовательских записей - Excel
- VBA Excel Userform EventHandler для динамически сгенерированных элементов управления не работает должным образом
- Excel Macro Userform - отдельный код, обрабатывающий несколько флажков
- Как вставить изображение из Интернета в форму VBA Excel Userform
- Ошибка в Userform.Hide внутри Workbook_Deactivate event
Вы могли бы создавать общедоступные переменные в пользовательской форме, которые могут быть установлены модулем.
Эти переменные доступны только в пользовательской форме по мере ее загрузки.
В Userform объявите общедоступные переменные для обоих объектов.
Public sMain As Worksheet Public provinceSugg as string Private Sub userformBtn1_Click() MsgBox provinceSugg sMain.Range("J6").Value = provinceSugg End Sub
Внутри модуля вы можете оценить обе эти переменные.
Sub probaCity() [...] If province = "" And city <> "" Then provinceSugg = sCurrent.Cells(p, db_column).Offset(0, 1).Value With UserForm2 .provinceSugg = provinceSugg Set .sMain = sMain .Label1 = "Do you mean " & city & " in " & provinceSugg & " ?" .Label1.TextAlign = fmTextAlignCenter .Show End With End If End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim selectColumn selectColumn= Split(Target.Address(1, 0), "$")(0) Call UserFormStart(selectColumn) End Sub
Внутренний основной модуль
Public columnSelection As String ... Public Sub UserFormStart(ByVal columnRef As String) 'MsgBox "Debug columnRef=" & columnRef columnSelection = columnRef UserForm1.Show End Sub
Внутри UserForm
Private Sub UserForm_Initialize() 'MsgBox "Debug UserForm_Initialize =" & columnSelection ... End Sub
Worksheet_SelectionChange вызывает sub в модуле, где columnSelection объявляется открытым и видимым из UserForm. Я использовал три разные переменные для столбца Reference, чтобы показать, что там, где пользовательский интерфейс имеет доступ к модулю. Вышеприведенное все работает и занимает много времени, чтобы найти и отработать, следовательно, представление. Счастливые охотники