2

このエラーが発生します:

タイプの不一致:'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ファイルでこれをテストしてみましたが、正常に動作します。しかし、約25,000行のExcelファイルで使用すると、常にエラーが発生します。誰か助けてもらえますか?ファイルのサイズは実行時にコードに影響しますか?

ありがとうございました。

編集: 私はテストのために50,000行以上のExcelシートでこれを試しましたが、うまくいきました。ただし、実際のファイルで使用する場合は常に同じエラーが表示されます。上記のコードでは適切に処理できない、注意すべき特殊文字/値はありますか?再度、感謝します。

4

1 に答える 1

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
于 2013-03-25T11:45:23.333 に答える