我已阅读并应用了我在类似主题上找到的解决方案,但在我的案例中似乎没有任何效果。
所以,我想将一个变量从我的Module1的一个子传递给一个userform。这是一个名为“provinceSugg”的字符串。
以下是我的代码的相关部分:
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 / 我有从the sub调用的MsgBox中显示的provinceSugg的内容(所以有一个provinceSugg,它不是一个空变量)。
2 / 从userform调用的MsgBox为空(因此传递值失败)并且我的程序在运行“sMain.Range(”J6“)时崩溃。值= provinceSugg”,类似于“Error 424对象必需“(因此变量未能传递给用户表单)。
我尝试了我在论坛和这里发现的所有内容(不同的方式表明,省档是一个公共变量,但仍然崩溃......)。
提前感谢您的帮助!
答案 0 :(得分:9)
您可以在Userform中创建可由模块设置的公共变量。
这些变量只能在加载时在Userform中访问。
在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
答案 1 :(得分:1)
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
Inside UserForm
Private Sub UserForm_Initialize()
'MsgBox "Debug UserForm_Initialize =" & columnSelection
...
End Sub
Worksheet_SelectionChange调用模块中的sub,其中columnSelection从UserForm声明为public和visable。 我使用列参考的三个不同变量来显示UserForm可以访问模块的位置。 上述所有工作并花了很长时间才找到并解决了提交。快乐的狩猎伙伴