【问题标题】:VBA use global variable in userform codeVBA在用户表单代码中使用全局变量
【发布时间】:2015-01-20 11:25:59
【问题描述】:

我正在使用 Excel 2010 VBA。有没有一种方法可以访问在用户表单外部声明的全局变量中的值,在用户表单内部的代码中?我的用户表单中的代码将全局变量返回为 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 为变量返回 ""。

希望有人能够帮助我理解这一点以及如何访问用户表单中的变量?提前谢谢你

【问题讨论】:

  • 使用全局变量还是局部变量没有区别,如果变量的值没有设置,则变量为空("")
  • 感谢 Vasily - 我已将 Set 留在了我的代码中(为简洁起见)。该变量在用户表单之外已设置、可访问且不为空。
  • 尝试调用你在msgbox之前设置变量的宏,因为目前它似乎没有被赋值

标签: vba global-variables userform


【解决方案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 

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

【讨论】:

    猜你喜欢
    • 2018-03-04
    • 2015-02-07
    • 2011-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-01
    • 2020-08-03
    相关资源
    最近更新 更多