Найти и заменить строку ВНУТРИ формулы - PullRequest
0 голосов
/ 25 января 2019

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

Формула может выглядеть примерно так:

= SUMIFS (Таблица1 [Сумма]; Table1 [PickerName]; $ D $ 2; Table1 [WayOfTransportGroup]; H27; Table1 [Date]; "> =" & $ I $ 2; Table1 [Date]; "<=" & $ I $ 3) </p>

Я хочу изменить небольшую часть формулы

Table1 [PickerName]; $ D $ 2

на

Table1 [PickerName]; $ D $ 2; Table1 [Тип]; "<>" & "gt 10 minuten";

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

Если ячейка имеет значение типа "Table1 [PickerName]; $ D $ 2" , тогда код работает и строка заменяется.Но если значение ячейки изменилось на = "Table1 [PickerName]; $ D $ 2" (обратите внимание на символ =), тогда код больше не сможет заменить строку.

Sub ChangeScopeClick()

    Dim fnd As Variant
    Dim rplc As Variant

    fnd = "Table1[PickerName];$D$2"
    rplc = "Table1[PickerName];$D$2;Table1[Type];""<>""&""gt 10 minuten"";"

    For Each c In Worksheets("Dashboard").Range("C7:Y31")
        c.Replace what:=fnd, Replacement:=rplc, _
        LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, _
        SearchFormat:=False, ReplaceFormat:=False
    Next c

End Sub

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

1 Ответ

0 голосов
/ 25 января 2019
c.formula = replace(c.formula, fnd, rplc)

обновить после комментария

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

, попробуйте использовать

Dim tmp as string

tmp = Replace(c.formula, fnd, rplc)

debug.Print tmp

c.formula = tmp

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...