你能告诉我为什么我收到错误为Subscript out of range- ArrParent
吗?当我使用MsgBox(Lbound(ArrParent))
时 - 它给我1,当我使用MsgBox(Ubound(ArrParent))
时 - 它给我960.所以在下面的行中我得到了out of range
错误。 Dic(ArrParent(Count))=Count+2
查找以下完整代码:
代码
Sub ParentPIDNumber(ArrParent,ob3,ob2,ob4)
Dim Dic,DicItems,Dickeys
Dim Count
Set Dic = CreateObject("Scripting.Dictionary")
Count=LBound(ArrParent)
'MsgBox(ArrParent(Count))
Do Until Count > UBound(ArrParent) - 1
Dic(ArrParent(Count))=Count+2 'here Dictionary keys are holding the row numbers as their Items
Count=Count+1
Loop
ParentChildBinding Dic,ob3,ob2,ob4
End Sub
Sub FileredOpenProcessToDel(ob3,ob2,ob4)
Dim ColumnToFilter,TotalRows
Dim rngFilter,cel,str,rangesToRemove,x
Dim strToRemove : strToRemove = ""
Dim ArrParent
objExcel1.ScreenUpdating = False
objExcel1.Calculation = -4135 'xlCalculationManual
ColumnToFilter=objExcel1.Application.WorksheetFunction.CountA(ob4.Rows(1)) - 1
ob4.Range(ob4.Cells(1,ColumnToFilter),ob4.Cells(1,ColumnToFilter)).AutoFilter ColumnToFilter, "Open",,,True
'Dim rngFilter as Range
Set rngFilter = objExcel1.Application.Intersect(ob4.UsedRange,ob4.UsedRange.Offset(1),ob4.Columns(1)).SpecialCells(12)'xlCellTypeVisible
'MsgBox(rngFilter.Rows.Count)
REM Do While 1=1
REM 'Msgbox
REM Loop
'msgbox "Filtered range has " & rngFilter.Rows.Count & " rows."
str=""
For each cel in rngFilter
str = str & (cel.row) & ":" & (cel.row) & ","
Next
rangesToRemove = Split(str,",")
For x = UBOUND(rangesToRemove)-1 To LBOUND(rangesToRemove) Step -1
strToRemove = strToRemove & rangesToRemove(x)
If Len(strToRemove) > 200 then
ob4.Range(strToRemove).delete'str & rangesToRemove(x) & ":" & rangesToRemove(x) & ","
strToRemove = ""
Else
strToRemove = strToRemove & ","
End If
Next
If len(strToRemove) > 0 then
strToRemove = Mid(strToRemove, 1, Len(strToRemove) - 1)
'strToRemove = Left(strToRemove, Len(strToRemove) -1)
ob4.Range(strToRemove).delete
End If
ob4.AutoFilterMode = False
objExcel1.ScreenUpdating = True
objExcel1.Calculation = -4105 'xlCalculationAutomatic
TotalRows=objExcel1.Application.WorksheetFunction.CountA(ob4.Columns(1))
'MsgBox(TotalRows)
ReDim ArrParent(TotalRows - 2)
ArrParent=ob4.Range("A2:" & "A" & TotalRows).Value
'Call to the subroutine
ParentPIDNumber ArrParent,ob3,ob2,ob4
End Sub
请在这里帮助我!
答案 0 :(得分:2)
在这种情况下,您可以做的最好的事情是在单独的脚本中提取错误代码并在那里进行实验,直到找到错误。
在你的情况下,我找不到错误,以下脚本没有错误,但它跳过了数组的最后一个元素
ArrParent = Array(10, 20, 30)
Count=LBound(ArrParent)
Set Dic = CreateObject("Scripting.Dictionary")
Do Until Count > UBound(ArrParent) - 1
Dic(ArrParent(Count))=Count+2
Count=Count+1
Loop
for each key in Dic
wscript.echo key & ":" & Dic(key)
next
'10:2
'20:3
我没有你的sourcearray进行试验,但你可以这样试试,为了没有索引超出范围错误你可以使用“for each”,如果你不需要count变量it甚至是迭代数组的最好方法。
Count = 1
Set Dic = CreateObject("Scripting.Dictionary")
for each element in ArrParent
Dic(element)=Count+2
Count = Count+1
next
for each key in Dic
wscript.echo key & ":" & Dic(key)
next
'10:3
'20:4
'30:5