【问题标题】:Accessing Object Properties in Array VBA访问数组 VBA 中的对象属性
【发布时间】:2018-05-21 16:08:14
【问题描述】:

我无法弄清楚如何使用 VBA 访问数组中的对象属性。我创建了一个数组,如:

Dim objectArray(10) as Variant    
Dim counter as Integer            'used to move to next element in array

接下来,我声明了一个对象并将其存储在数组中:

Dim object as Variant
objectArray(0) = object           'object stored in array[0]
counter = counter + 1             'increment counter

我想将数组传递给函数。

Call function(objectArray())

该函数接收对象数组,例如:

Public function(objectArray() as Variant)

到目前为止,当我调试它时,它似乎已经工作了。我的 objectArray() 似乎包含该对象。当我在数组中存储一个对象时,调试器显示

objectArray(0)(1,1) .... 'this is in the Watch section of the debugger

我想在数组的第一个位置访问该对象的属性。该对象将包含一个名称、几个值和一个日期。我一直在尝试访问该对象的属性,例如

Dim separateVar as Variant             'declare new var to hold "name"

separateVar = objectArray(0)(1,1).Value

但是,当我运行宏时,我得到“发生一些错误,13,类型不匹配”。我是否错误地访问了对象属性值?

任何帮助将不胜感激。查找有关访问对象的文章很容易,但查找有关访问其各个属性的文章非常困难。

【问题讨论】:

  • objectArray(0).Value
  • 您在对象分配中缺少Set。你这里说的是对象还是数组?

标签: arrays vba function object properties


【解决方案1】:

试试这个。

Sub T()
    Dim objInner1(1) As String
        objInner1(0) = "Hello"
        objInner1(1) = "World 1"

    Dim objInner2(1) As String
        objInner2(0) = "Hello"
        objInner2(1) = "World 2"

    Dim objInner3(1) As String
        objInner3(0) = "Hello"
        objInner3(1) = "World 3"

    Dim objOuter(2) As Variant
        objOuter(0) = objInner1
        objOuter(1) = objInner2
        objOuter(2) = objInner3

    PrintArray objOuter
End Sub

Sub PrintArray(objArray As Variant)
    Dim idx As Long
    For idx = LBound(objArray) To UBound(objArray)
        Debug.Print objArray(idx)(0) & " " & objArray(idx)(1)
    Next idx
End Sub

'Hello World 1
'Hello World 2
'Hello World 3

【讨论】:

  • @Kostak K。感谢您提供此解决方案。这是一种比我正在做的更简单的方法并且有效。
猜你喜欢
  • 2015-08-03
  • 1970-01-01
  • 2018-11-12
  • 2013-12-02
  • 2020-06-11
  • 2019-10-15
  • 2015-07-03
  • 1970-01-01
相关资源
最近更新 更多