Метод Range.replace ничего не заменяет - PullRequest
0 голосов
/ 19 октября 2018

Я попробовал и протестировал этот метод с более простыми формулами, и он отлично работал, однако, когда я пробую его с моими новыми более длинными формулами, он вводит FormulaPart1 в range("J2"), но не заменяет текст на FormulaPart2 и 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

Ответы [ 3 ]

0 голосов
/ 19 октября 2018

Если ваше приложение не настроено на использование ссылок R1C1, вы пытаетесь поместить ссылки R1C1 в существующую формулу стиля A1, которая не будет работать.Либо измените приложение на стиль R1C1, добавьте формулы и затем верните его обратно, либо измените две запасные части для использования ссылок на стиль А1.

0 голосов
/ 23 октября 2018

Кажется, что проблема действительно заключалась в синтаксисе формулы при ее разбиении для замены.

Приведенный ниже код содержит правильное разбиение для формулы.

Sub ArrayFormCalc()

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

Application.ReferenceStyle = xlR1C1

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*100,"""")"

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)))"

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



End Sub
0 голосов
/ 19 октября 2018

Я не могу определить точную проблему, но возможно, что вы пишете неверную формулу в массив, прежде чем пытаться что-то заменить.Я предлагаю использовать формулу замены в строке и вставлять только конечный результат в FormulaArray.https://docs.microsoft.com/en-us/office/vba/language/reference/user-interface-help/replace-function

...