首页 > 解决方案 > Range.replace 方法不替换任何东西

问题描述

我已经用更简单的公式尝试并测试了这种方法,并且效果很好,但是当我用新的更长的公式尝试它时,它会进入FormulaPart1range("J2")但不会用FormulaPart2and替换文本FormulaPart3。该代码也没有给出任何错误。

基本上,该公式计算可用性百分比,即

((Available Hours - Engineering Downtime)/ Available Hours) * 100

请在下面查看我的代码。

Sub ArrayFormCalc()

Dim FormulaPart1 As String
Dim FormulaPart2 As String
Dim FormulaPart3 As String
Dim S1 As Worksheet

Set S1 = Sheets("Sheet1")

FormulaPart1 = "=IFERROR(((INDEX(INDIRECT(RC5&""_""&TEXT(R5C,""mmm"")),MATCH(RC6,INDIRECT(RC5&""_""&TEXT(R5C,""mmm"")&""_Shift""),0)" & _
               ",MATCH(R5C,INDIRECT(RC5&""_""&TEXT(R5C,""mmm"")&""_Date""),0))))-xxxxx,"""")"

FormulaPart2 = "SUMIFS(DT_Cur_Day_Hrs,DT_Equip,RC7,DT_Site,RC5,DT_Strt_Date,R5C,DT_Shift,RC6,DT_Cat,""Engineering Downtime"")" & _
               "+SUMIFS(DT_Nxt_Day_Hrs,DT_Equip,RC7,DT_Site,RC5,DT_End_Date,R5C,DT_Shift,RC6,DT_Cat,""Engineering Downtime""))/yyyy"

FormulaPart3 = "(INDEX(INDIRECT(RC5&""_""&TEXT(R5C,""mmm"")),MATCH(RC6,INDIRECT(RC5&""_""&TEXT(R5C,""mmm"")&""_Shift""),0)," & _
               "MATCH(R5C,INDIRECT(RC5&""_""&TEXT(R5C,""mmm"")&""_Date""),0))*100)"

Application.ReferenceStyle = xlR1C1

With S1.Range("J2")
    .FormulaArray = FormulaPart1
    .Replace "xxxxx", FormulaPart2, xlPart
    .Replace "yyyy", FormulaPart3, xlPart
End With

Application.ReferenceStyle = xlA1

End Sub

标签: excelvbaarray-formulas

解决方案


我无法确定确切的问题,但可能是您在尝试替换之前将无效公式写入数组。我建议在字符串上预先使用替换公式,并且只将最终结果粘贴到 FormulaArray 中。 https://docs.microsoft.com/en-us/office/vba/language/reference/user-interface-help/replace-function


推荐阅读