Excel VbScript抛出一个错误";未知运行时错误“;
我编写了一个代码来删除excel工作表中的行,但它给了我一个错误,如主题中所述 代码Excel VbScript抛出一个错误";未知运行时错误“;,excel,vbscript,vba,Excel,Vbscript,Vba,我编写了一个代码来删除excel工作表中的行,但它给了我一个错误,如主题中所述 代码 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 ind
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
请在下面找到调试屏幕:
你能帮我解释一下原因吗?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
通过这种方式删除行,无论如何都可以删除不需要的行,因为删除会导致行向上移动,对吗?有没有更快的流程?它会一个接一个地删除,对吗?很明显,你可以把它分成几块。。。我费心更新以展示一种可能的方法。很好的一种,只是为了确认-它是
UBOUND(rangesToRemove)
还是UBOUND(rangesToRemove)-1
?请按照您所说的查看修改后的代码,但我还是把它弄坏了!但是没有进步!