Формула замены массива Excel - VBA - PullRequest
0 голосов
/ 24 сентября 2018

Не могу понять, почему XXX и YYY не заменяются.Когда я запускаю макрос, я не получаю никаких ошибок, но формула по-прежнему читается так же, как в FormulaPart1.

Sub Test()

Dim FormulaPart1 As String
Dim FormulaPart2 As String
Dim FormulaPart3 As String

FormulaPart1 = "=SUM(IF(ISERROR(XXX),0,(YYY)))"
FormulaPart2 = "('Forecast - Budget Report'!R[1]C[-4]:R[989]C[7]*('Forecast - Budget Report'!R[1]C[12]:R[989]C[12]=""Rental Income"")*('Forecast - Budget Report'!R[-1]C[-4]:R[-1]C[7]<=R[-3]C[-4]))"
FormulaPart3 = "('Forecast - Budget Report'!R[1]C[-4]:R[989]C[7]*('Forecast - Budget Report'!R[1]C[12]:R[989]C[12]=""Rental Income"")*('Forecast - Budget Report'!R[-1]C[-4]:R[-1]C[7]<=R[-3]C[-4])"

With ThisWorkbook.Sheets("Budget Comparison").Range("F11")
    .FormulaArray = FormulaPart1
    .Replace "XXX", FormulaPart2
    .Replace "YYY", FormulaPart3
End With

End Sub'

Я ценю помощь здесь!

1 Ответ

0 голосов
/ 24 сентября 2018

Оба Range.Find и Range.Replace «запомнить» настройки, которые использовались на рабочем листе пользователем.Всегда указывайте хотя бы минимальные аргументы для достижения вашей цели;например, MATCHCASE не кажется важным, но LOOKAT делает это, поскольку он должен быть xlPart.

.Replace what:="XXX", replacement:=FormulaPart2, lookat:=xlpart
.Replace what:="YYY", replacement:=FormulaPart3, lookat:=xlpart

Существуют другие методы для снижения значения .FormulaArray ниже предела в 255.

worksheets("Forecast - Budget Report").name = "f"

ThisWorkbook.Sheets("Budget Comparison").Range("F11").FormulaArray = _
  "=SUM(IF(ISERROR((f!B12:M1000*(f!R12:R1000="Rental Income")*(f!B10:M10<=B8))),0,((f!B12:M1000*(f!R12:R1000="Rental Income")*(f!B10:M10<=B8)))))"

worksheets("f").name = "Forecast - Budget Report"

Изменение имени листа и использование ссылок xlA1 приводит к уменьшению формулы до 142 символов с исходных 343 символов.

...