Excel VBA代码段导致运行时错误';438';

Excel VBA代码段导致运行时错误';438';,excel,vba,Excel,Vba,第一次海报 下面的VBA脚本每次都会中断工作宏。我尝试了不同的语法来修复,但得到了相同的结果 代码应该检查L列中的所有数据单元,查找字符串“ERROR”。如果找到,将该单元格和右侧的单元格复制到正确的列“AX”中,并清除L和M中的文本 它每次中断的步骤是“Cells(i,50).Paste”行 粘贴不是可用的方法单元格是一个范围对象。因此,“对象不支持此属性或方法”: 你可以试试: Cells(i, 50).PasteSpecial xlPasteAll 正如@DavidZemens所说,您错

第一次海报

下面的VBA脚本每次都会中断工作宏。我尝试了不同的语法来修复,但得到了相同的结果

代码应该检查L列中的所有数据单元,查找字符串“ERROR”。如果找到,将该单元格和右侧的单元格复制到正确的列“AX”中,并清除L和M中的文本

它每次中断的步骤是“Cells(i,50).Paste”行


粘贴
不是可用的方法<代码>单元格是一个
范围
对象。因此,“对象不支持此属性或方法”:

你可以试试:

Cells(i, 50).PasteSpecial xlPasteAll

正如@DavidZemens所说,您错过了正确的方法名称

此外,您的代码似乎做了不必要的工作,其中:

  • 它首先在当前的
    i
    行中执行一些操作,如果单元格(i,12)中出现这种情况,则行应该
    。Value=“ERROR”
    check返回True

  • 如果单元格(i,21),那么它将删除相同的i行。Value=“ERROR”然后再次返回True

最后,您没有使用任何特殊的粘贴功能,因此您可能希望使用普通的复制功能

因此,我将如下重构它

Dim lrow As Long, i As Long

lrow = Cells(Rows.Count, "L").End(xlUp).Row

For i = lrow To 4 Step -1
    If Cells(i, 21).value = "ERROR" Then
        Rows(i).Delete
    ElseIf Cells(i, 12).value = "ERROR" Then
        Range("L" & i & ":M" & i).Copy Destination:=Cells(i, 50)
        Range("L" & i & ":M" & i).ClearContents
    End If
Next i

工作得很有魅力。非常感谢@DavidZemens!
Dim lrow As Long, i As Long

lrow = Cells(Rows.Count, "L").End(xlUp).Row

For i = lrow To 4 Step -1
    If Cells(i, 21).value = "ERROR" Then
        Rows(i).Delete
    ElseIf Cells(i, 12).value = "ERROR" Then
        Range("L" & i & ":M" & i).Copy Destination:=Cells(i, 50)
        Range("L" & i & ":M" & i).ClearContents
    End If
Next i