【发布时间】:2020-08-08 12:30:43
【问题描述】:
我在类对象之间移动数组时遇到问题。这个想法是将某些数据添加到类对象,更改二维数组中的一些参数并将该数组返回到主过程。我已经尝试了所有方法,从公共数组到将数组放入公共字典,但我无法将其从课堂中取出。
Sub ClassArray()
Dim Arr() As Variant
ReDim Arr(1 To 2) As Variant
Arr(1) = "A"
Arr(2) = "B"
Set Class = New ClassObject
Class.Add Arr
Debug.Print Class.Count
Range("A1:C3") = Class.Matrix
End Sub
我的班级对象:
Private ClassMatrix(1 To 1, 1 To 1) As Variant
Private Counter As Long
'------
Private Sub Class_Initialize()
'Appaerently putting the ReDim statement here doesn't do anything
End Sub
'------
Public Sub Add(ByVal Arr As Variant)
x = 3
y = 3
Dim ClassMatrix() As Variant
ReDim ClassMatrix(1 To y, 1 To x)
If Arr(1) = "A" Then
ClassMatrix(1, 1) = 1
End If
If Arr(2) = "B" Then
ClassMatrix(3, 3) = 1
End If
End Sub
'------
Property Get Count() As Long
For x = 1 To 3
For y = 1 To 3
If ClassMatrix(y, x) = 1 Then Counter = Counter + 1
Next y
Next x
Count = Counter
End Property
'------
Property Get Matrix() As Variant
Matrix = ClassMatrix
End Property
在类对象方面也给我带来很多麻烦的是调试器从不突出显示导致问题的行?我发现与常规程序相比,调试它们相当困难。
【问题讨论】:
-
您的 Add 方法正在处理本地数组,而不是在类级别定义的数组。
-
你能详细说明你的答案吗?我已将 UserMatrix 数组声明为私有,以便在类中使用?
-
“我不能把它从课堂上拿出来”——当你的代码运行时会发生什么?
-
Dim ClassMatrix() As VariantinAdd创建一个“隐藏”全局数组的本地数组。 -
对于您的调试问题,请尝试使用 Tools.Options.General 并选中“Break on All Errors”单选按钮。如果你不这样做,那么你就不会在报告的类中得到错误。