VbScript抛出错误“未知的运行时错误”

时间:2012-12-22 16:39:42

标签: excel-vba vbscript vba excel

我写了一个代码来删除excel表中的行,但是它给了我一个错误,就像在主题中提到的那样。

CODE

 Sub ChildPidDelt(ob3,DeletArr)

Dim height,row,str,i
Dim dataArray
Dim d
height = objExcel1.Application.WorksheetFunction.CountA(ob3.Columns(1))
'MsgBox(height)
ReDim dataArray(height - 2, 0) ' -1 for 0 index, -1 for the first row as header row, excluded
str = ""
dataArray = ob3.Range(ob3.Cells(2, 1),ob3.Cells(height, 1)).Value
Set d = CreateObject("scripting.dictionary")
MsgBox(LBound(DeletArr) & ":" & UBound(DeletArr))
For i = LBound(DeletArr) To UBound(DeletArr)
    If Not d.exists(DeletArr(i)) Then
        d(DeletArr(i)) =  0
    End If
Next
MsgBox(LBound(dataArray,1) & ":" & UBound(dataArray,1))
For i = LBound(dataArray, 1) To UBound(dataArray, 1)
    If d.exists(dataArray(i, 1)) Then

        str = str & (i+1) & ":" & (i+1) & ","

    Else
        'found = False
    End If
Next
If Len(str) > 0 Then
    MsgBox(Len(str))
    str = Mid(str, 1, Len(str) - 1)
    MsgBox(str)
    ob3.Range(str).Delete

End If

End Sub

请找到以下调试屏幕:

screen1 Screen2 Screen3 Screen4 Screen5

你能帮我说一下这是什么原因吗?

1 个答案:

答案 0 :(得分:1)

Range()无法处理超过255个字符的字符串。

您可以通过将删除分成多个部分来解决此问题。这是一个简单的方法:直接放在最后一个msgbox

之后
dim x
dim rangesToRemove
rangesToRemove = Split(str,",")
for x = UBOUND(rangesToRemove) to LBOUND(RangesToRemove) Step -1
   ob3.Range(rangesToRemove(x)).delete
next

编辑:好的,由于你的评论,这是一个更复杂的方法,将删除分成块。

dim x
dim rangesToRemove
dim strToRemove : strToRemove = ""
rangesToRemove = Split(str,",")
for x = UBOUND(rangesToRemove) to LBOUND(RangesToRemove) Step -1
   strToRemove = strToRemove & rangesToRemove(x)
   If Len(strToRemove) > 200 then
       ob3.Range(strToRemove).delete
       strToRemove = ""
   else
       strToRemove = strToRemove & ","
   end if
next
If len(strToRemove) > 0 then
   strToRemove = Left(strToRemove, Len(strToRemove) -1)
   ob3.Range(strToRemove).delete
end if