excel - VBA - 添加 ConditionalFormatting 时出现运行时错误 5
问题描述
在我的 VBA 应用程序中,我使用了一些条件格式。当我将系统小数更改为 Comma(,) 而不是 Dot(.) 时。它开始给我
“运行时错误 5 - 无效的过程调用或参数”
在添加格式条件的行
MyRange.FormatConditions.Add Type:=xlExpression, Formula1:=formula_1
.
下面的代码..
Private Sub Worksheet_Change(ByVal Target As Range)
With ThisWorkbook.Sheets("financeSheet")
Application.EnableEvents = False
Application.UseSystemSeparators = True
Dim MyRange As Range
Set MyRange = ThisWorkbook.Sheets("financeSheet").Range(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)"
MyRange.FormatConditions.Add Type:=xlExpression, Formula1:=formula_1
End With
End Sub
在通常的系统设置为 Dot(.) 时,我工作得很好。请帮忙修复
解决方案
当您使用 VBA 在单元格中编写公式时,您可以选择:您可以使用该属性formula
来编写与语言无关的公式 - 对于 Excel,这意味着您以美式英语形式编写它,使用逗号作为参数分隔符和所有函数的英文名称。这适用于您的计算机和 Excel 运行的语言和区域设置。
如果出于任何原因您想使用当前的区域和语言设置来编写公式,您可以使用属性FormulaLocal
.
事实证明,当您将公式写入条件格式时,您别无选择,您需要使用本地设置来指定它。在您的情况下,您可能需要将参数分隔符从 更改","
为";"
。尝试
formula_1 = Replace(formula_1, ",", Application.International(xlListSeparator))
但是,如果您想确保您的公式也能在世界各地的同事或朋友的计算机上正确创建,最好的办法可能是将公式的(英文)版本写入工作表某处的单元格中这是不可见的并读取该formulaLocal
单元格的 -property 以获取翻译后的公式。
请注意,只要您使用正确的 listSeparator,Excel 将接受带有英文函数名称的公式(或任何名称,您可以键入Blablabla),但是,当您以不同的语言运行时,它不会触发。
但是,如果您使用正确的条件格式公式创建工作表,保存此工作簿并使用以不同语言运行的 Excel 将其打开,则公式将自动翻译并继续工作。
推荐阅读
- python - 在 Python(Pandas) 中清理模糊重复和行的标准化
- android - 问题:为什么react native video不全屏播放视频?
- angular - 错误:必须为具有名称的表单控件提供值:
- scala - rdd 与数据帧 Spark 上的序列化
- javascript - R Shiny + plotly:使用 javascript 更改轨迹的颜色,而不影响多个图中的标记和图例
- ios - 从中文切换回英文会增加换行符
- java - 链表中如何从一个节点遍历到另一个节点
- django - django 自定义字段接受并存储小数,但将输出作为整数返回
- excel - .range(ContRow&":"&ContRow).entirerow.Delete
- excel - 检查有效日期 - VBA