VBA运行时错误13类型不匹配如果是statment

时间:2016-07-28 10:28:09

标签: vba excel-vba excel

我收到运行时错误'13':当我尝试运行代码时键入不匹配。调试突出显示'IF'语句,但我无法弄清楚错误在哪里。任何帮助,将不胜感激。谢谢

  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复制到另一张没有可能的非ID字符串,在这种情况下它可以是#N / A或00000000-0000,我也不希望那些非复制的单元格在目标范围内显示为空白。

1 个答案:

答案 0 :(得分: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
 ...  

注意:我试图在现有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