Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vbscript 在excel文件中排序时类型不匹配_Vbscript - Fatal编程技术网

Vbscript 在excel文件中排序时类型不匹配

Vbscript 在excel文件中排序时类型不匹配,vbscript,Vbscript,我得到这个错误: 类型不匹配:“objExcel.Cells(…).Value” 运行此程序时: Set objExcel = CreateObject("Excel.Application") objExcel.Visible = True Set objWorkbook = objExcel.Workbooks.Open("myFile.xlsx") strMach = "string1,string2,string3" arrMach = Split(strMach, ",") for

我得到这个错误:

类型不匹配:“objExcel.Cells(…).Value”

运行此程序时:

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文件上测试它,效果很好。但一旦我在25000行左右的excel文件中使用它,我总是会得到错误。有人能帮忙吗?文件的大小是否会在运行时影响我的代码

多谢各位

编辑:
我在一张50000多行的excel表格上进行了测试,效果很好。但是,每当我在实际文件上使用它时,仍然会出现相同的错误。是否有任何特殊字符/值是我应该知道的,而这些字符/值是上述代码无法正确处理的?再次感谢。

当您检查的单元格包含错误时,可能会出现这样的错误,例如,由于删除的行导致引用丢失

添加一些调试代码以识别罪魁祸首:

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