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

问题描述 投票:1回答:1

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,5- 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
excel-vba vba excel
1个回答
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中工作的公式时记录宏来计算出错误,然后在视觉上将该宏与您正在使用的宏进行比较。差异非常明显,因为它是第二个陈述延续线的开头。

© www.soinside.com 2019 - 2024. All rights reserved.