Excel-VBA:将变量从Sub传递到Userform

Excel-VBA:将变量从Sub传递到Userform,excel,vba,variables,userform,Excel,Vba,Variables,Userform,我已经阅读并应用了我在类似主题上找到的解决方案,但在我的案例中似乎什么都不起作用 所以,我想把一个变量从Module1的一个子模块传递到一个userform。这是一个名为“provinceSugg”的字符串 以下是我代码的相关部分: Public provinceSugg As String Sub probaCity() [...] If province = "" And city <> "" Then provinceSugg = sCurrent.Cells(p, db_c

我已经阅读并应用了我在类似主题上找到的解决方案,但在我的案例中似乎什么都不起作用

所以,我想把一个变量从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/我的sub调用的MsgBox中显示了provinceSugg的内容(因此有一个provinceSugg,它不是空变量)。
2/从userform调用的MsgBox为空(因此传递值失败),我的程序在运行“sMain.Range(“J6”).value=provinceSugg”时崩溃,类似于“Error 424 Object Required”(因此变量无法传递到userform)

我尝试了我在论坛和这里找到的所有东西(不同的方式表明provinceSugg是一个公共变量,但仍然崩溃…)


提前感谢您的帮助

您可以在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
Sub-probaCity()
[...]
如果省为“”,市为“”,则
PROVINCESUG=sCurrent.Cells(p,db_列)。偏移量(0,1)。值
使用UserForm2
.provinceSugg=provinceSugg
Set.sMain=sMain
.Label1=“你的意思是指城市和省吗?”
.Label1.TextAlign=fmTextAlignCenter
显示
以
如果结束
端接头
主模块内部

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
工作表\u SelectionChange调用模块上的一个子模块,其中columnSelection被声明为公共且可从UserForm查看。 我使用了三个不同的变量作为列引用,以表明UserForm可以访问模块。
以上所有的工作,并花了很多时间来寻找和工作,因此提交。快乐打猎的人对我来说很好。是否有任何其他正在运行的代码(如用户表单初始化)与
provinceSugg
交互?您可以发布您的工作簿(如有必要,请进行消毒)?@brettdj我有一些更新:在按钮中单击此代码(“MsgBox provinceSugg sMain.Range(“J6”).Value=provinceSugg),我现在在MsgBox中显示了provinceSugg内容,但下一行仍然没有显示任何内容,并且出现相同的错误(需要对象/错误424),因此该值已传递,但无法在第二条指令中读取…如果尝试
Sheets(x).Range(“J6”).Value=provinceSugg
其中
x
sMain
的位置。我想这是你的问题哦,天哪,我太专注于provinceSugg了,以至于我完全忘记了处理其他对象!非常感谢brettdj,确实如此!provinceSugg不是你案例中错误的原因。这是范围未设置。有关更多详细信息,请参阅。是否必须重置或清除这些公共变量以防止内存泄漏,或者在关闭表单时这些公共变量是否会消失?当需要从其他项目传递变量时,这是一个更好的解决方案。(否则,其他项目需要使用userform包含对项目的引用,以便能够访问公共变量。)
Private Sub UserForm_Initialize()

'MsgBox "Debug UserForm_Initialize =" & columnSelection
...

End Sub