首页 > 解决方案 > 使用数组作为新对象不起作用

问题描述

我的 VBA 代码出了问题。我用属性创建了一个名为“clsColl”的类模块。当我将变量声明为“clsColl”时,一切正常,但是当我将数组声明为“clsColl”时,如果我在另一个子程序中使用此数组,我会收到错误“对象变量或未设置块变量”,我称之为在第一个子。

我做了一个简短的例子,里面的代码很麻烦。

首先是我的班级模块“clsColl”

Option Explicit

Public name As String

Public weight as single

现在正在运行的代码

Sub workingA()

Dim persona As New clsColl

Call workingB(persona)

End Sub

Sub workingB(persona As cls Coll)

persona.name = "phil"

persona.weight = 100

End Sub

现在代码不起作用

Sub failingA()

Dim persona() As New clsColl

ReDim persona(1 to 5)


Call failingB(persona)

End Sub

Sub failingB(persona() As cls Coll)



persona(1).name = "phil"

persona(1).weight = 100
End Sub

我得到一个错误,只是将我的代码从使用变量更改为使用数组。

现在我在第二个代码中得到一个错误对象变量或未设置块变量”,但我不知道为什么。我想知道为什么使用数组作为对象会造成这样的麻烦,而使用普通变量是工作正常。

标签: arraysexcelvbaclassmodule

解决方案


你的代码行

Dim persona As New clsColl

是一个组合

Dim persona As clsColl
If persona Is Nothing Then Set persona = New clsColl

至少在我看来,使用这种组合语法是不好的做法。

现在对于数组,这不能再工作了,因为每个数组项必须首先Set是一个clsColl对象:

Sub notMorefailingA()
 Dim persona() As clsColl
 Dim i As Integer
 ReDim persona(1 To 5)
 For i = 1 To 5
  Set persona(i) = New clsColl
 Next
 Call notMorefailingB(persona)
End Sub

Sub notMorefailingB(persona() As clsColl)
 persona(1).name = "phil"
 persona(1).weight = 100
End Sub

推荐阅读