我已经阅读并应用了在类似主题上发现的解决方案,但在我的情况下似乎没有任何效果。

因此,我想将变量从Module1的一个子元素传递给用户窗体。这是一个名为“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/我的subs调用的MsgBox中显示了ProvinceSugg的内容(因此有一个provinceSugg,它不是一个空变量)。
2/从用户窗体调用的MsgBox为空(因此,传递值失败),并且在运行“sMain.Range(“J6”)。Value = provinceSugg“时出现类似“Error 424 Object Required”的错误,我的程序崩溃了(所以变量无法传递到用户表单)。

我尝试了在论坛和此处找到的所有内容(以不同的方式表明provinceSugg是公共(public)变量,但仍然崩溃...)。

在此先感谢您的帮助 !

最佳答案

您将能够在可由模块设置的用户窗体内创建公共(public)变量。

这些变量只能在用户窗体加载时访问。

在用户窗体中,声明两个对象的公共(public)变量。

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

关于Excel-VBA : pass variable from Sub to Userform,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17288997/

10-10 09:21