ActiveCell.FormulaR1C1上的VBA运行时错误1004

时间:2017-12-30 02:12:27

标签: excel-vba vba excel

Excel单元格中的公式“= DATEVALUE(IF(ISERROR(INT(LEFT(MID(D2,FIND(”/“,D2)+ 1,LEN(D2)),FIND(”/“, MID(D2,FIND( “/”,D2)+ 1,LEN(D2))) - 1))),日(D2),INT(LEFT(MID(D2,FIND( “/”,D2)+1 ,LEN(D2)),FIND( “/”,MID(D2,FIND( “/”,D2)+ 1,LEN(D2))) - 1)))及 “/” &安培; IF(MID( D2,LEN(D2)-4,1)= “/”,INT(LEFT(D2,FIND( “/”,D2)-1)),月(D2))及 “/” &安培; IF(MID (D2,LEN(D2)-4,1)=“/”,INT(右(D2,4)),年(D2)))“完美无缺。

使用Excel 2007中的“Record-Macro”选项自动生成以下VBA代码,以实用的方式得出上述公式。

然而,在运行VBA相同的代码时,我得到运行时错误'1004'。请帮助纠正这个问题。 VBA代码:

Sub Macro()

' Macro2 Macro

    Range("C2").Select
    ActiveCell.FormulaR1C1 = _
        "=DATEVALUE(IF(ISERROR(INT(LEFT(MID(RC[1],FIND(""/"",RC[1])+1,LEN(RC[1])),FIND(""/"",MID(RC[1],FIND(""/"",RC[1])+1,LEN(RC[1])))-1))),DAY(RC[1]),INT(LEFT(MID(RC[1],FIND(""/"",RC[1])+1,LEN(RC[1])),FIND(""/"",MID(RC[1],FIND(""/"",RC[1])+1,LEN(RC[1])))-1)))&""/""&IF(MID(RC[1],LEN(RC[1])-4,1)=""/"",INT(LEFT(RC[1],FIND(""/"",RC[1])-1)),MONTH(RC[1]))&""/""&IF(MID(RC[1],LEN(" & _
        ",1)=""/"",INT(RIGHT(RC[1],4)),YEAR(RC[1])))"
    Selection.AutoFill Destination:=Range("C2:C3239")
    Range("C2:C3239").Select

End Sub

1 个答案:

答案 0 :(得分:0)

当您将公式放入VBA时,您丢失了公式的最后D2)-4部分,从而使公式无效。

Sub Macro()

' Macro2 Macro

Range("C2").Select
ActiveCell.FormulaR1C1 = _
    "=DATEVALUE(IF(ISERROR(INT(LEFT(MID(RC[1],FIND(""/"",RC[1])+1,LEN(RC[1])),FIND(""/"",MID(RC[1],FIND(""/"",RC[1])+1,LEN(RC[1])))-1))),DAY(RC[1]),INT(LEFT(MID(RC[1],FIND(""/"",RC[1])+1,LEN(RC[1])),FIND(""/"",MID(RC[1],FIND(""/"",RC[1])+1,LEN(RC[1])))-1)))&""/""&IF(MID(RC[1],LEN(RC[1])-4,1)=""/"",INT(LEFT(RC[1],FIND(""/"",RC[1])-1)),MONTH(RC[1]))&""/""&IF(MID(RC[1],LEN(" & _
    "RC[1])-4,1)=""/"",INT(RIGHT(RC[1],4)),YEAR(RC[1])))"
Selection.AutoFill Destination:=Range("C2:C3239")
Range("C2:C3239").Select
End Sub

FWIW,我通过在插入您在Excel中使用的公式时记录宏来计算出错误,然后在视觉上将该宏与您正在使用的宏进行比较。差异非常明显,因为它是第二个陈述延续线的开头。