【问题标题】:Find and replace string INSIDE a formula在公式中查找和替换字符串
【发布时间】:2019-01-25 21:15:28
【问题描述】:

我正在尝试根据用户按钮事件动态更改仪表板上的某些公式。

公式可能如下所示:

=SUMIFS(Table1[Amount];Table1[PickerName];$D$2;Table1[WayOfTransportGroup];H27;Table1[Date];">="&$I$2;Table1[Date];"

我想改变一小部分公式

Table1[PickerName];$D$2

进入

Table1[PickerName];$D$2;Table1[Type];""&"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 函数来更改作为公式一部分的字符串。

【问题讨论】:

    标签: excel vba function


    【解决方案1】:
    c.formula = replace(c.formula, fnd, rplc)
    

    评论后更新

    我怀疑替换没有生成正确的公式。分号或逗号分隔符并不重要

    尝试使用

    Dim tmp as string
    
    tmp = Replace(c.formula, fnd, rplc)
    
    debug.Print tmp
    
    c.formula = tmp
    

    调试每一行,甚至尝试手动将tmp 输出到即时窗口的单元格中,以确保引用正确

    【讨论】:

    • 我试过了,同样的事情发生了。是否与使用分号 (;) 而不是逗号 (,) 作为我的列表分隔符有关?当我调试代码时,监视列表似乎使用逗号而不是我选择的分号。
    • @TheNiers 我认为这无关紧要 - 看看我的更新
    • 我在查找和替换字符串中将分号更改为逗号,例如从 "Table1[PickerName];$D$2" 到 "Table1[PickerName],$D$2" 然后你的代码似乎确实有效。诡异的。不过谢谢!
    猜你喜欢
    • 2023-02-13
    • 1970-01-01
    • 1970-01-01
    • 2015-01-10
    • 2011-08-22
    • 2015-09-22
    • 2019-06-24
    • 2016-01-13
    相关资源
    最近更新 更多