调用类Method时,VBA中出现“SubScript Out of Range”错误

我将尽可能详细地阐述这个问题。 显然我不能张贴图片,因为我是新成员…所以我会试着描述我的情况尽可能好。

所以,我正在和一个叫做“Shifts”的习惯class一起工作。 我有这个类声明和build立在VBA的类模块。 我在一个普通模块中声明了“Shifts”类的一个实例,并将其称为“Shift”。

Dim Shift As New Shifts 

我的“Shifts”类有4个variables(String Arrays):

 Private ShiftMembers() As String Private ShiftCallSigns() As String Private ShiftAssignments() As String Private ShiftStatuses() As String 

我在类“Clear”中写了一个Sub来清除这些variables中的数据(通过ReDim):

 Public Sub Clear() ReDim ShiftMembers(-1) As String ReDim ShiftCallSigns(-1) As String ReDim ShiftAssignments(-1) As String ReDim ShiftStatuses(-1) As String End Sub 

现在,当我调用“Shifts”类的Clear Sub(声明为“Shift”)时:

 Shift.Clear 'This is called from within the Module. 

我得到下标超出范围(错误9)。 我的类声明在模块的顶部,在任何方法或函数之外。 我的类中的Clear()子被声明为Public。 我不明白为什么我似乎无法正确访问我的Clear Sub。

任何帮助将不胜感激!

-抢

我不知道你是否可以这样使用ReDim 。 在文档中 , 下标参数由Option Base语句绑定:

需要

数组variables的维数; 可以宣布多达60个多维度。 下标参数使用以下语法:[lower To] upper [,[lower To] upper]。 。 。 当没有明确指出时,数组的下界由Option Base语句控制。 如果没有Option Base语句存在,则下限为零。

Option Base语句必须是10-1是越界,所以错误是有道理的。

为了清除数组,使用Erase命令而不是ReDim

我把它放在我的类模块中(我使用_Initialize过程只是为了使数组中的一个非空,以便validationErase是否完成了它的工作):

 Private ShiftMembers() As String Private ShiftCallSigns() As String Private ShiftAssignments() As String Private ShiftStatuses() As String Sub Class_Initialize() ReDim ShiftMembers(1 To 2) End Sub Public Sub Clear() Erase ShiftMembers Erase ShiftCallSigns Erase ShiftAssignments Erase ShiftStatuses End Sub 

我使用以下来testing:

 Sub t() Dim s As New Shift s.Clear End Sub