Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VBA运行时错误13如果状态不匹配,则类型不匹配_Vba_Excel - Fatal编程技术网

VBA运行时错误13如果状态不匹配,则类型不匹配

VBA运行时错误13如果状态不匹配,则类型不匹配,vba,excel,Vba,Excel,我收到运行时错误“13”:尝试运行代码时类型不匹配。Debug突出显示了“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

我收到运行时错误“13”:尝试运行代码时类型不匹配。Debug突出显示了“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
Dim i作为整数
最后一排一样长
工作手册(“模板部分_II.xlsx”)。工作表(2)。激活
lastRow=单元格(Rows.Count,1).End(xlUp).Row
对于i=2到最后一行
如果单元格(i,1).值为“#N/A”且单元格(i,1).值为“00000000-000”,则
细胞(i,1)。复制
工作表(1).范围(“A2:A”和lastRow).粘贴特殊XLPasteValue
如果结束
接下来我
事实上,我正试图做到这一点:

我有一张表,其中我有100行不同的ID,我想将此ID复制到另一张表,而不带可能的非ID字符串。在这种情况下,它可以是#N/A或00000000-0000,此外,我不希望那些未复制的单元格在目标区域中显示为空白。

将您对单元格的访问包装在一个复选框内,以确保单元格不包含任何错误值(例如,单元格“包含”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
 ...  

将对单元格的访问包装在一个检查中,确保单元格不包含任何错误值(例如,单元格“包含”一个除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
 ...  


您的
for
下一个
在哪里?放弃复制它。但是它在代码中,并且不起作用。当错误发生时,
单元格(i,1)的值是多少。值
?您是否知道您正在将所有内容粘贴到同一单元格中?你想做什么?当错误发生时,单元格的值不是000000000-000,也不是000000000-000,它是000000000-000以上的单元格,我并没有复制同一单元格中的所有内容,我看到它会按预期进行复制,直到值不是000000000-000,你的
for
下一个
在哪里?放弃复制它。但是它在代码中,并且不起作用。当错误发生时,
单元格(i,1)的值是多少。值
?您是否知道您正在将所有内容粘贴到同一单元格中?你想做什么?当错误发生时,单元格的值不是000000000-000或#N/A,它是000000000-000以上的单元格,我并没有复制同一单元格中的所有内容,我看到它会按预期复制,直到值不是000000000-000,VBA中缺少短路一直困扰着我:'(是的,下一次尝试只是“继续”当前循环迭代->不可用:实际上这是可行的,但有点难看:将您的
For…next
包装为
Do…而False
并使用
Exit For
跳到下一次迭代。哈哈,耶:)但是你也有嵌套块;很酷的把戏抱歉..走错了路:把你所有的代码都放在
For…Next
Do…循环中,而False
则用
Exit Do
跳转到下一个迭代。VBA中缺少短路一直困扰着我:'(是的,下一次尝试只是“继续”当前循环迭代->不可用:实际上这是可行的,但有点难看:将您的
For…next
包装为
Do…而False
并使用
Exit For
跳到下一次迭代。哈哈,耶:)但是你也有嵌套的块;不管怎样,很酷的把戏对不起..错误的方法是:将所有代码在
For…Next
中包装成
Do…循环,而False
则使用
Exit Do
跳过到下一个迭代。