Excel – VBA:从Sub传递variables到Userform

我已阅读并应用了类似主题上find的解决scheme,但在我的案例中似乎没有任何工作。

所以,我想从我的Module1的一个子variables传递给一个用户表单。 这是一个名为“provinceSugg”的string。

这是我的代码的相关部分:

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 /我有从我的子集调用的MsgBox显示provinceSugg的内容(所以有一个provinceSugg,它不是一个空的variables)。
2 /从用户窗体调用MsgBox是空的(所以传递值失败),我的程序崩溃时运行“sMain.Range(”J6“)。Value = provinceSugg”类似“错误424对象需要”(所以variables未能传递给用户表单)。

我尝试了所有在论坛和这里find的东西(用不同的方式来表示provinceSugg是一个公共variables,但仍然崩溃)。

在此先感谢您的帮助 !

您将能够在用户窗体中创build可由模块设置的公共variables。

这些variables只能在加载时在Userform中访问。

在用户窗体中,为这两个对象声明公共variables。

 Public sMain As Worksheet Public provinceSugg as string Private Sub userformBtn1_Click() MsgBox provinceSugg sMain.Range("J6").Value = provinceSugg End Sub 

在模块中,您可以评估这两个variables。

 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 

用户窗体内部

 Private Sub UserForm_Initialize() 'MsgBox "Debug UserForm_Initialize =" & columnSelection ... End Sub 

Worksheet_SelectionChange调用columnSelection声明为公共的模块上的一个子,并从UserForm中可见。 我为列参考使用了三个不同的variables,以显示UserForm访问模块的位置。 以上所有的工作和花费了很长时间才find和解决这个问题。 快乐的狩猎伙计