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

时间:2018-03-07 20:30:02

标签: excel vba

第一次发布海报。

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

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

每次破坏的步骤是“Cells(i,50).Paste”行。

Set rng = Application.Range("L4:M" & lrow)
For i = rng.Rows.Count To 4 Step -1
    If Cells(i, 12).Value = "ERROR" Then
        Range("L" & i & ":M" & i).Copy
        Cells(i, 50).Paste
        Range("L" & i & ":M" & i).ClearContents
    End If
    If Cells(i, 21).Value = "ERROR" Then
        Rows(i).Delete
    End If
Next I

2 个答案:

答案 0 :(得分:2)

df = pd.DataFrame(np.random.randint(1,6,100000), columns=['S']) # First set response for time t df['F'] = np.where(df['S'] == 5, 1, np.where(df['S'] == 1, -1, 0)) # Now loop to apply motelling %%timeit # (OP's answer) previousF = 0 for row in df.itertuples(): df.at[row.Index, 'F'] = np.where((row.S >= 4) & (previousF == 1), 1, np.where((row.S <= 2) & (previousF == -1), -1, row.F)) previousF = row.F 1.11 s ± 27.1 ms per loop (mean ± std. dev. of 7 runs, 1 loop each) 不是Range object可用的方法。 PasteCells个对象。 Ergo,“对象不支持此属性或方法”:)

你可以尝试:

Range

答案 1 :(得分:0)

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

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

  • 它首先在当前i行中执行某项操作If Cells(i, 12).Value = "ERROR"检查返回True

  • 然后如果后续If Cells(i, 21).Value = "ERROR" Then再次返回True,它会删除相同的i行

最后,您没有使用任何PasteSpecial功能,因此您可能希望使用普通Copy一个

因此,我按照以下方式重构

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