2

我需要在整个 C 列中应用“IF”公式,直到使用 VBA 在工作表中具有最后一个值。

但如果我使用以下代码,我会收到错误 438。请帮帮我

Sub test11()

With Sheets("Sheet")
        .Range("c1:c" & .Cells(.Rows.Count, "A").End(xlUp).Row).Formula = "=IF(B1="",TRIM(A1),TRIM(B1))"

    End With



End Sub
4

2 回答 2

1

所以你的工作表名称是Sheetor Sheet1?而 OP 提到的工作表名称是Sheet2. 这消除了一个错误。其次,您需要将D列设置为.Cells(.Rows.Count,"D").End(xlUp).Row)而不是A列。

这是一个非常难看的代码:它将最后使用的行计数到Long变量中。然后相应地设置范围以设置formulausing AutoFill

Sub test11()
Dim l As Long    

l = Sheets(1).Range("d1:d" & Sheets(1).Cells(Sheets(1).Rows.Count, "D").End(xlUp).Row).Count
    With Sheets("Sheet1")
        .Range("d1").Formula = "=IF(IsNull(B1),TRIM(A1),TRIM(B1))"
        .Range("d1").AutoFill Destination:=Range("d1:d" & l), Type:=xlFillDefault
    End With
End Sub
于 2012-12-25T15:11:20.413 回答
0

你的逻辑似乎有点奇怪,但这有效:

Sub test11()
    With Sheets("Sheet1")
        .Range(.Range("c1"), .Range("C" & .Rows.Count).End(xlUp)) = "=IF(B1="""",TRIM(A1),TRIM(B1))"
    End With
End Sub

您需要在 VBA 中将引号内的引号加倍。
另一种变体:

Sub test12()
    With Sheets("Sheet1")
        Intersect(.Range("c1").CurrentRegion, .Range("C:C")).Formula = "=IF(B1="""",TRIM(A1),TRIM(B1))"
    End With
End Sub
于 2012-12-25T15:47:47.670 回答