我收到此错误:
运行此程序时类型不匹配:'objExcel.Cells(...)。值'
:
Set objExcel = CreateObject("Excel.Application")
objExcel.Visible = True
Set objWorkbook = objExcel.Workbooks.Open("myFile.xlsx")
strMach = "string1,string2,string3"
arrMach = Split(strMach, ",")
for j = 0 to Ubound(arrMach)
remove(arrMach(j))
Next
Function remove(strValue)
i = 1
removeCounter = 0
Do Until objExcel.Cells(i, 2).Value = ""
If objExcel.Cells(i, 2).Value = strValue Then
Set objRange = objExcel.Cells(i, 2).EntireRow
objRange.Delete
i = i - 1
removeCounter = removeCounter + 1
End If
i = i + 1
Loop
wscript.echo strValue & " - REMOVED!"
wscript.echo "Removed " & removeCounter & " results."
End Function
该程序用于搜索所有现有行中的字符串,如果找到,则删除整行。
错误似乎来自这条线:
Do Until objExcel.Cells(i, 2).Value = ""
我已经尝试在大约50行的excel文件上测试它,它工作正常。但是一旦我在一个大约25,000行的excel文件上使用它,我总是得到错误。有人可以帮忙吗?文件大小是否会在运行时影响我的代码?
谢谢。
修改 我已经在50,000多行excel表上试过它进行测试,它运行良好。但是,每当我在实际文件上使用它时,仍会出现相同的错误。是否有任何我应该注意的特殊字符/值,上面的代码无法正确处理?再次感谢。
答案 0 :(得分:3)
当您检查的单元格包含错误时,可能会出现这样的错误,例如因为删除的行导致参考丢失。
添加一些调试代码以识别罪魁祸首:
On Error Resume Next
Do Until objExcel.Cells(i, 2).Value = ""
If Err Then Exit Do
If objExcel.Cells(i, 2).Value = strValue Then
Set objRange = objExcel.Cells(i, 2).EntireRow
objRange.Delete
i = i - 1
removeCounter = removeCounter + 1
End If
i = i + 1
Loop
If Err Then
WScript.Echo "Error " & Err.Number & " in row "& i & ": " & Err.Description
WScript.Echo "Value is: " & objExcel.Cells(i, 2).Value
End If
On Error Goto 0