【问题标题】:Add values to an array of a VBA object将值添加到 VBA 对象的数组
【发布时间】:2020-05-15 14:44:00
【问题描述】:

我开始在 VBA 中使用类,但我不明白为什么我不能在我创建的类的对象中向名为 SDA 的数组添加任何值。

类模块是:

'clsProject Class Module Code

Public LinhaProjeto As String
Public SDA As Variant



Public Sub Class_Initialize()

    ReDim SDA(1 To 12)

    Dim i As Integer
    For i = 1 To 12
        SDA(i) = 0
    Next i

End Sub

而常规模块中的 sub 是

Sub test()

    Dim oProject As clsProject
    Set oProject = New clsProject

    oProject.SDA(1) = 2
    Debug.Print oProject.SDA(1)
End Sub

代码运行没有任何错误,但它没有像我想象的那样添加值。在名为“test”的子的末尾,oProject.SDA(1) 的值仍然是 0,而不是我想要的 2。

谁能帮我找出我的错误?

感谢您的帮助!

【问题讨论】:

  • 我不太确定...但是数组不允许作为类的公共成员(例如,如果您在类中使用“DIM SDA()”,则会产生编译错误) .我承认我可能完全错了,但也许在语法上没有错,但是一旦你强制变体成为一个数组,那么主模块代码就会忽略它而不是产生运行时错误(?)顺便说一句,还有很多其他方法实现你正在尝试做的事情(例如,类中的私有数组并将分配包装在一个属性中)所以它不应该阻止你达到你的最终目标。干杯
  • @Techno Dabbler 是对的。一个类可以引用在标准模块中声明的公共变量,但反之则不行。将SDA() 声明为私有并使用Property Get 从类外部检索其值。

标签: arrays excel vba class


【解决方案1】:

请将此添加到您的班级:

Public Property Get ValSDA(Pos)
    ValSDA = SDA(Pos)
End Property

Public Property Let ValSDA(Pos, Nilai)
    SDA(Pos) = Nilai
End Property

并像这样更改您的子测试:

Sub test()

    Dim oProject As clsProject
    Set oProject = New clsProject

    oProject.ValSDA(1) = 2

    Debug.Print oProject.ValSDA(1)

End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-21
    • 2022-01-13
    • 2018-09-06
    • 2014-07-09
    • 1970-01-01
    • 2022-12-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多