2013-03-25 66 views
2

我收到此錯誤:類型不匹配,同時通過Excel的分類文件

Type mismatch: '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 = "" 

我試圖測試這個在Excel與大約50行的文件,它工作正常。但是,一旦我在大約25,000行的excel文件上使用它,我總會得到錯誤。誰能幫忙?在運行時文件的大小是否會影響我的代碼?

謝謝。

編輯: 我曾試過這在一個50,000+行excel表進行測試,它工作正常。但是,每當我在實際文件上使用它時,仍會出現相同的錯誤。是否有任何特殊字符/值我應該知道哪些不能由上面的代碼正確處理?再次感謝。

回答

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 
+0

感謝。效果很好 – Programmer 2013-03-26 03:32:44