VBA全局类变量

标签 vba excel class userform

我的障碍是尝试让多个子程序识别类变量。当我尝试全局声明它们时,出现编译错误:“无效的外部过程”。然后,当我运行公共(public)函数或子函数来声明变量时,它们在其他子函数中保持未定义状态。我希望多个子程序能够识别变量,因为它们的值应该通过用户窗体进行更改,然后在不同的子程序中使用。

如果它能以这种方式工作,那就太好了,但我知道我的设计可能从根本上存在缺陷。请指教!

这是我的类定义,作为名为“cRSM”的类模块插入:

Option Explicit

Private pName As String
Private pDesiredGrowth As Double

'Name of RSM
Public Property Get Name() As String
Name = pName
End Property

Public Property Let Name(Value As String)
pName = Value
End Property


'Growth property
Public Property Get DesiredGrowth() As Double
DesiredGrowth = pDesiredGrowth
End Property

Public Property Let DesiredGrowth(Value As Double)
If Value > 0 And Value < 1 Then
    pDesiredGrowth = Value
End If
End Property

这是无效的过程错误(我将其放在“全局声明”部分中):

'Bedoya
Dim Bedoya As cRSM
Set Bedoya = New cRSM
Bedoya.Name = "Bedoya"

这是“变量未定义错误”(在私有(private)子中):

Private Sub Add_Click()
**Bedoya.DesiredGrowth** = Txt2.Value

感谢您的宝贵时间

最佳答案

在标准模块(我将其命名为 MGlobals)中,放入

Public Bedoya As cRSM

然后在另一个标准模块(我将其命名为 MOpenClose)中,放入

Sub Initialize()
    If Not Bedoya Is Nothing Then
        Set Bedoya = New cRSM
    End If
End Sub

您想要设置的任何默认属性都应该在 Class_Initialize 过程中设置。在任何您想要使用 Bedoya 的过程中,使用

Initialize

如果需要的话它将实例化全局变量。此方法与 New 关键字之间的唯一区别是您不会意外地使用此方法实例化变量。您要么调用Initialize,要么不调用。许多 VBA 开发人员使用 New,但出于这个原因几乎从不这样做。

关于VBA全局类变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37666290/

相关文章:

excel - 输入新行并复制上面单元格中的公式

excel - 使用 VBA 提取 Microsoft Exchange 自定义/扩展属性?

excel - 将单元格从一般格式设置为文本

c# - 如何使用 getValues 从 Excel 获取值?

java - 我们可以将 java .class 转换为 .java 文件吗?那么 java 是如何被称为安全语言的呢?

vba - 在 Word VBA 中使用对动态创建的控件的引用

excel - 如何在 VBA 中重新抛出错误

excel - VBA - 通过 ADODB 将 Excel 2007 电子表格连接到 Access 2007 数据库

javascript - 如何在 Javascript 类定义内部(外部)定义原型(prototype)方法?

java - 有没有办法制作一个可以在 Java 中使用 [] 的自定义类,类似于数组?