[英]VBA Excel : Odd subscript out of range error (9)
在这个简单的子代码中,我遇到了奇怪的VBA下标超出范围错误:
Sub writeTypes(ByVal rowNb As Long, ByVal colNb, ws As Worksheet)
On Error GoTo ErrorHandler_ObjMethod
Const METHOD_NAME = "writeTypes (CCase)"
With ws
If Not isArrayEmpty(pTypes) Then
For i = LBound(pTypes) To UBound(pTypes)
If pTypes(i) <> "" Then
.Cells(rowNb, colNb).Value = .Cells(rowNb, colNb).Value & pTypes(i) & ";"
ElseIf i = UBound(pTypes) Then
.Cells(rowNb, colNb).Value = Left(.Cells(rowNb, colNb).Value, Len(.Cells(rowNb, colNb).Value) - 1)
End If
Next i
Else: .Cells(rowNb, colNb).Value = "N/A"
End If
End With
ErrorHandler_ObjMethod:
If err.Number <> 0 Then
Workbooks(AA_RESOURCES_WB).Close SaveChanges:=True
MsgBox (METHOD_NAME & vbNewLine & err.Number & vbNewLine & err.description)
End
End If
End Sub
该过程的调用行是: pUnassignedCases(i).writeTypes j, 7, ws
(作为参数传递的变量是正确的,我确保了几次)
这是我已经尝试做的事情:
-要删除参数中的“ ByVal”
-删除第一个“如果不是”
-删除“ Elseif”块
删除操作正确完成,没有任何语法/逻辑错误。
我还以任何可能的方式检查了所有使用过的变量(包括“ pTypes”字符串数组)。 一切似乎都很好。
我还尝试将此代码直接合并到我的其他子代码中(该代码通过带有For循环的CCase对象数组),而不是通过CCase对象过程调用它,并且它以某种方式适用于第一个CCases对象,然后强制循环超越CCase数组的上限...我对此毫无意义。
当我逐行浏览代码时,错误发生在“ End sub”行。 但是,当我删除错误处理后,它可以正常运行,但是以某种方式,错误会传递到与该子程序无关的代码中的其他地方,并且在此之前运行良好……然后,如果我简单地删除了对该子程序的任何调用一切都按原样进行。
另外,即使发生错误,我的工作表行也仍然可以很好地更新为“ N / A”(这也可以推测是因为我的case对象现在都没有类型)。 这就像是被诅咒的潜艇。 这真让我抓狂。
我注意到了几件事:我不知道这些是否能解决您遇到的问题,但可能有用:
参数ByVal colNb
没有类型。
我怀疑ElseIf i = UBound(pTypes) Then
意在去除结尾的";"
如果是这种情况,最好将类似的代码放在for循环之外。 考虑:数组pTypes
在UBound索引位置中的值可以为<> ""
pTypes
? 如果是这样,您可能有逻辑错误。
如果单元格没有值,并且使用了Len(.Cells(rowNb, colNb).Value) - 1)
则在用作左函数的参数时,它将引发错误。 我认为当数组仅包含空字符串时会发生这种情况。
isArrayEmpty
:我想知道此函数的作用。 我认为它按锡罐上的说明去做。
上面没有解释您的问题,“ err”为小写字母很奇怪,如另一个答案中所述。 如果Exit sub
在错误处理程序之前,则它将在没有错误发生时停止评估if语句。
哈维
代码显示差的错误处理。
Sub a3(optional RaiseAnError As Boolean = true)
On Error GoTo errhand
If RaiseAnError Then
Err.Raise 1, "", "Simulating code that might raise and error "
End If
MsgBox "Got to the end of your code"
errhand:
If Err.Number <> 0 Then
MsgBox "Err.Number = " & Err.Number
Err.Raise 2, "", "Simulating code ie workbook close that might raise and error "
MsgBox "ok"
End
End If
End Sub
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.