我使用Excel 2010 VBA。有没有一种方法可以访问在userform外部声明的全局变量中的值,或者访问userform内部的代码中的值?我的userform中的代码将全局变量返回为null-不知道为什么!
变量在ThisWorkbook模块中声明为:
Public TargetCell As Range
Public TargetCellWorksheet as Worksheet
Public CurrentValue As Long
在用户表单中,我在"更新"按钮上有以下代码:
Private Sub Update_Click()
MsgBox ("Start of Update sub. TargetCellWorksheet =" & TargetCellWorksheet)
End Sub
msgbox为变量返回"。
希望有人能帮助我理解这一点,以及如何访问用户表单中的变量?提前感谢
对于问题本身,您声明
Public TargetCellWorksheet as Worksheet
然后尝试将其显示到MsgBox:中
MsgBox ("Start of Update sub. TargetCellWorksheet =" & TargetCellWorksheet)
您的意思是TargetCellWorksheet.Name
还是TargetCellWorksheet.Range("A1").Value
,因为MsgBox希望接收字符串?
但是,如果您确信您的代码,则它可能取决于变量未正确声明为Public,并且仅在模块级别。如果变量是表单本身的一部分,您可能需要向表单添加一个属性(我假设您打算使用CurrentValue
,但您可以简单地将属性的类型从Long
更改为Worksheet
,然后使用它(:
这会进入表单的代码
Dim pCurrentValue As Long
Public Property Get CurrentValue() As Long
CurrentValue = pCurrentValue
End Property
Public Property Let CurrentValue (value As Long)
pCurrentValue = value
End Property
因此,将变量从模块传递到如下形式:
在您输入表单代码之前,这将进入您的模块
Dim myForm As New yourForm
myForm.CurrentValue = whateverYourVariableIs
因此,在表单中使用变量如下:
因此,您可以通过从表单的属性调用变量来使用变量
myVariableInTheForm = Me.CurrentValue
然而,我必须说,奇怪的是,一个公共变量没有到达表单的堆栈。你确定你之前不是只声明变量而没有赋值吗?