2016-07-28 208 views
0

我收到運行時錯誤'13':類型不匹配當我嘗試運行代碼。調試突出了'IF'語句,但我無法弄清楚錯誤在哪裏。任何幫助,將不勝感激。由於VBA運行時錯誤13類型不匹配如果報告

Dim i As Integer 
    Dim lastRow As Long 
    Workbooks("Template Part_II.xlsx").Worksheets(2).Activate 
lastRow = Cells(Rows.Count, 1).End(xlUp).Row 
For i = 2 To lastRow 
    If Cells(i, 1).Value <> "#N/A" And Cells(i, 1).Value <> "00000000-000" Then 
     Cells(i, 1).Copy 
     Worksheets(1).Range("A2:A" & lastRow).PasteSpecial xlPasteValues 
    End If 
Next I 

,事實上我試圖做到這一點:
我有一個表,我有100行各種ID的,我想這個標識複製到沒有這種可能的非ID字符串另一片它可以是#N/A或00000000-0000,我也不希望那些未複製的單元格在目標範圍內顯示爲空白。

+0

哪裏是'For'的'Next'? –

+0

忘了複製它。但它是在代碼中,它不工作。 – blau

+0

發生錯誤時'Cells(i,1).Value'的值是多少? –

回答

2

包裝你訪問到校驗這確保了細胞內的細胞不包含錯誤值(例如小區的「包含」一個除以0)像這樣

... 
For i = 2 To lastRow 
    If Not IsError(Cells(i, 1).Value) Then 
     If Cells(i, 1).Value <> "#N/A" And Cells(i, 1).Value <> "00000000-000" Then 
      Cells(i, 1).Copy 
      Worksheets(1).Range("A2:A" & lastRow).PasteSpecial xlPasteValues 
     End If 
    End If 
Next i 
... 

注:I試圖插入的條件在現有If的前面,但它似乎VBA不使用短路因此包裝


更新由於評論

您可能希望像這樣更改您的代碼

Dim i As Integer 
Dim lastRow As Long 
Dim targetRow As Long 

Workbooks("Template Part_II.xlsx").Worksheets(2).Activate 
lastRow = Cells(Rows.Count, 1).End(xlUp).Row 
targetRow = 2 
For i = 2 To lastRow 
    If Not IsError(Cells(i, 1).Value) Then 
     If Cells(i, 1).Value <> "#N/A" And Cells(i, 1).Value <> "00000000-000" Then 
      Cells(i, 1).Copy 
      Worksheets(1).Cells(targetRow, 1).PasteSpecial xlPasteValues 
      targetRow = targetRow + 1 
     End If 
    End If 
Next i 
+0

在VBA中缺乏短路一直困擾着我:'( – RGA

+0

是的,下一個嘗試是'繼續'當前循環迭代 - >不可用太:D – DAXaholic

+0

其實這是可行的,但它有點難看:Wrap在'Do ... While False'中使用'For ... Next'並使用'Exit For'跳過下一個迭代。 –

相關問題