[英]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.