我有一个带有计算项目的数据透视表。每当我更改pivot主过滤器中的参数时,文本格式化都会返回默认值。
为了不每次格式化表格,我创建了一个宏,每当我在单元格D1中放置一个值时,应该格式化数据透视表。 C2是格式样本单元格。似乎宏运行,但不会执行。
你可以帮忙吗?代码:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$d$1" Then
Application.EnableEvents = False
Range("C2").Activate
Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
"=ORAZ(JEŻELI($B2=" 'OFERTA/TOTAL RYNEK'";1;0);JEŻELI(C2>1;1;0))"
Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
With Selection.FormatConditions(1).Font
.Color = -16776961
.TintAndShade = 0
End With
With Selection.FormatConditions(1).Interior
.PatternColorIndex = xlAutomatic
.ThemeColor = xlThemeColorAccent6
.TintAndShade = 0.399945066682943
End With
Selection.FormatConditions(1).StopIfTrue = False
Range("C2").Select
Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
"=ORAZ(JEŻELI($B1=""OFERTA/TOTAL RYNEK"";1;0);JEŻELI(C1>1;1;0))"
Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
With Selection.FormatConditions(1).Font
.Color = -16776961
.TintAndShade = 0
End With
With Selection.FormatConditions(1).Interior
.PatternColorIndex = xlAutomatic
.ThemeColor = xlThemeColorAccent6
.TintAndShade = 0.399945066682943
End With
Selection.FormatConditions(1).StopIfTrue = False
Selection.Copy
Columns("C:N").Select
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
Application.EnableEvents = True
End If
End Sub
答案 0 :(得分:0)
使用以下内容比较两个字符串,例如Target.Address
和"$d$1"
:
If Target.Address = "$d$1" Then
..永远不能等同于TRUE
,就好像Target.Address
确实引用第4列第1行一样,它会保留字符串"$D$1"
。使用=
进行比较主要使用二进制比较。
您需要将其更正为"$D$1"
,或使用文本比较方法与StrComp
函数。
逐步完成活动,将鼠标悬停在Target.Address
上会突出显示此内容。
答案 1 :(得分:0)
正如另一张海报所提到的 - 二进制比较永远不会评估你对True
的参数你可以将地址保存为字符串并将参数更改为If Target.Address = [Assigned String Name] Then
但是改变它会更好以下论点:
If Not Intersect(Target, Range("$D$1")) Is Nothing And Target.Cells.Count = 1 Then
'code here
End If
这样可以降低代码行为不符合您预期的风险,并且只有在只更改D1时才会传递参数,并且正如下面的注释所说,是更合适的代码。