2016-07-28 172 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'跳过下一个迭代。 –