我在Excel 2010 VBA中工作。有没有办法在userform中的代码中访问在userform外部声明的全局变量中的值?我的userform中的代码将全局变量返回为null - 无法解决原因!
变量在ThisWorkbook模块中声明为:
Public TargetCell As Range
Public TargetCellWorksheet as Worksheet
Public CurrentValue As Long
在userform中,我在"更新"按钮:
Private Sub Update_Click()
MsgBox ("Start of Update sub. TargetCellWorksheet =" & TargetCellWorksheet)
End Sub
msgbox返回""对于变量。
希望有人能够帮助我理解这一点以及如何访问userform中的变量?提前谢谢
答案 0 :(得分:1)
至于问题本身,你宣布
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
我必须说,但是,公共变量没有到达表单的堆栈是很奇怪的。你确定你不仅在没有分配任何值之前声明变量吗?