我正在尝试根据用户按钮事件在仪表板上动态更改某些公式。
公式可能看起来像这样:
= SUMIFS(Table1 [Amount]; Table1 [PickerName]; $ D $ 2; Table1 [WayOfTransportGroup]; H27; Table1 [Date];“> =”&$ I $ 2; Table1 [Date];“ <=” &$ I $ 3)
我想更改公式的一小部分
Table1 [PickerName]; $ D $ 2
进入
Table1 [PickerName]; $ D $ 2; Table1 [Type];“ <>”&“ gt 10分钟”;
我在下面写了一些代码。这似乎适用于普通字符串,但是它不能替换属于公式一部分的部分。
如果单元格的值类似于“ 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函数来更改作为公式一部分的字符串。
答案 0 :(得分: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
输出到立即窗口放入单元格中,以确保引用正确