VBA在userform代码中使用全局变量

时间:2015-01-20 11:26:00

标签: vba global-variables userform

我在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中的变量?提前谢谢

1 个答案:

答案 0 :(得分:1)

至于问题本身,你宣布

Public TargetCellWorksheet as Worksheet

然后尝试将其显示到MsgBox:

MsgBox ("Start of Update sub. TargetCellWorksheet =" & TargetCellWorksheet)

你可能是TargetCellWorksheet.NameTargetCellWorksheet.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 

我必须说,但是,公共变量没有到达表单的堆栈是很奇怪的。你确定你不仅在没有分配任何值之前声明变量吗?