excel 运行时间错误13先前成功运行的程序模块中的类型不匹配

7vhp5slm  于 2023-03-20  发布在  其他
关注(0)|答案(1)|浏览(202)

样本数据:

0votes
https://stackoverflow.com/questions/32382401/autohide-multiple-rows-in-excel/32383360#32383360
vbaexcel
answered Sep 3, 2015 at 18:53
0votes
Accepted
https://stackoverflow.com/questions/32273121/corretc-excel-vba-macro-to-return-the-values-as-text-and-as-date/32273219#32273219  'clickable format
vbaexcel
answered Aug 28, 2015 at 14:18

我想插入一行之间的选票和网址行,如果答案是不接受和网址后立即投票行的目的是使分组5行最终转置数据在一个单一的行。
这是我的代码:

Sub insertrow()
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("Sheet2")
Last = Cells(Rows.Count, "A").End(xlUp).Row
For i = Last To 1 Step -1
    If (Cells(i, "A").Value) Like "*vote*" And (Cells(i + 1, "A").Value) <> "Accepted" Then
        Cells(i + 1, "A").EntireRow.Insert
    End If
Next i
End Sub

我得到运行时错误13类型不匹配的以下行,虽然这个程序运行成功昨天晚上类似的数据。

If (Cells(i, "A").Value) Like "*vote*" And (Cells(i + 1, "A").Value) <> "Accepted"

任何帮助都将不胜感激。

lsmepo6l

lsmepo6l1#

已对您提供的数据和代码进行快速测试,没有任何问题。但是,代码存在问题:虽然您将特定工作表分配给变量,但仍继续使用 ActiveSheet。很可能此工作表不是包含示例数据的工作表,并且可能包含导致类型不匹配错误的数据。
在Excel中编写VBA程序时,应始终准确限定要在哪个工作表上工作。一种方法是使用With-语句。注意在CellsRangeRowsColumns的 * 每个 * 示例之前添加一个点-以告知VBA您正在引用With-语句的对象。

Sub insertrow()
    With ThisWorkbook.Sheets("Sheet2")
        Dim Last As Long, i As Long
        Last = .Cells(.Rows.Count, "A").End(xlUp).Row
        For i = Last To 1 Step -1
            If (.Cells(i, "A").Value) Like "*vote*" _
            And (.Cells(i + 1, "A").Value) <> "Accepted" Then
                .Cells(i + 1, "A").EntireRow.Insert
            End If
        Next i
    End With
End Sub

或者,如果你更喜欢这样:

Sub insertrow()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("Sheet2") 
    
    Dim Last As Long, i As Long
    Last = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
    For i = Last To 1 Step -1
        If (ws.Cells(i, "A").Value) Like "*vote*" _
        And (ws.Cells(i + 1, "A").Value) <> "Accepted" Then
            ws.Cells(i + 1, "A").EntireRow.Insert
        End If
    Next i
End Sub

类型不匹配之类的错误通常可以通过使用调试器检查相关数据(在本例中为2个单元格的内容)来很容易地发现。

相关问题