vba - 条件格式在 VBA 中出现错误
问题描述
我有一个来自 VBA 代码的条件格式,用于在值发生变化时适用的列。
该列实际上是一个价格列,所以当输入价格值时,我会根据一些公式应用我的条件。当小数点分隔符为“。”时它正在工作。(点)(例如:1.323)
但是当系统设置中小数分隔符为“,”时。添加条件格式的公式时出现错误..
**
- 下面的代码..
**
Dim MyRange As Range
Set MyRange =Target.Address
formula_1 = "=IF(OR($AV" & Target.Cells.row & "=""No"",AND($AV" & Target.Cells.row & "=""Yes"")),IF(Y" & Target.Cells.row & "=AJ" & Target.Cells.row & ",FALSE,TRUE),FALSE)"
formula_2 = "=0"
formula_3 = "=IF($N" & Target.Cells.row & "=""EUR"",TRUE,FALSE)"
MyRange.Interior.Color = RGB(250, 191, 143)
MyRange.FormatConditions.Delete
MyRange.FormatConditions.Add Type:=xlExpression, Formula1:=formula_1
MyRange.FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, Formula1:=formula_2
MyRange.FormatConditions.Add Type:=xlExpression, Formula1:=formula_3
MyRange.FormatConditions(1).Interior.Color = RGB(255, 192, 0)
MyRange.FormatConditions(1).SetFirstPriority
MyRange.FormatConditions(1).StopIfTrue = False
MyRange.FormatConditions(2).StopIfTrue = True
MyRange.FormatConditions(2).NumberFormat = "##0.00"
MyRange.FormatConditions(3).StopIfTrue = True
MyRange.FormatConditions(3).NumberFormat = "[$EUR] #,##0.0000"
行中触发
"MyRange.FormatConditions.Add Type:=xlExpression, Formula1:=formula_1"
错误错误代码:5
解决方案
我认为这不是关于小数点分隔符而是关于列表分隔符。除其他外,此分隔符用作函数参数的分隔符。
常规(单元格)公式总是翻译成美国版本。如果您在使用列表分隔符 = ";" 的系统上工作 并在单元格中输入公式=OR(A1=1;B1=2)
,在 VBA 中你会看到=OR(A1=1,B1=2)
。到目前为止一切顺利,众所周知。
但是,由于一些奇怪的原因,对于条件格式中使用的公式,没有完成翻译,因此您需要使用实际的列表分隔符编写公式。您可以使用Application.International(xlListSeparator)
. 但是,一旦设置,当您在具有不同设置的系统上打开该工作簿时,该公式将起作用(因此会发生某种翻译)。
如果你想灵活一点,请执行以下操作:
Const formula_1 = "=OR(A1=1<SEP>B1=2)"
Dim localFormula_1 As String
localFormula_1 = replace(formula_1, "<SEP>", Application.International(xlListSeparator))
MyRange.FormatConditions.Add Type:=xlExpression, Formula1:=localFormula_1
顺便说一句:您不应该将小数分隔符和列表分隔符设置为相同的字符。
推荐阅读
- python - 如何让它准确检测数字中有多少位?
- c++ - Log4cxx << 运算符导致访问冲突
- javascript - 如何检测无效的Js cookie并将其删除
- javascript - 为什么使用 IE10 的十进制算术没有精度损失?
- angular - 使用 highcharts 创建深度图表并以从图表中心创建出价和要价的方式创建出价和要价
- flutter - 如何将 Draggable 从一个 DragTarget 拖动到另一个?
- java - 功能分解 Vs Currying Vs 部分应用
- regex - 如何使用 Jenkins 警告下一代插件正确解析多行警告?
- express - 为什么 nuxtServerInit req session 重复接收和不接收数据?
- c# - 如何将“int”数据类型项转换为“字符串”并在 LINQ 中使用“包含”在字符串列表中搜索?