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

时间:2013-06-25 04:06:19

标签: excel vba variables userform

我已阅读并应用了我在类似主题上找到的解决方案,但在我的案例中似乎没有任何效果。

所以,我想将一个变量从我的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对象必需“(因此变量未能传递给用户表单)。

我尝试了我在论坛和这里发现的所有内容(不同的方式表明,省档是一个公共变量,但仍然崩溃......)。

提前感谢您的帮助!

2 个答案:

答案 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可以访问模块的位置。 上述所有工作并花了很长时间才找到并解决了提交。快乐的狩猎伙伴