使用VBA检测计算机正在使用的十进制符号

Wai*_*ong 14 excel vba excel-vba

是否可以使用VBA来检测计算机上使用的十进制符号?

我有一个宏脚本,它将条件格式添加到Excel工作表.问题是目标计算机可能使用两个小数符号.所以我想让脚本适用于所有计算机

代码看起来像这样

With range("D" & row)
    .FormatConditions.Delete
    .FormatConditions.Add Type:=xlCellValue, Operator:=xlNotBetween, Formula1:="=1,01*$C$" & row, Formula2:="=0,99*$C$" & row
    .FormatConditions(1).Font.ColorIndex = 3
End With
Run Code Online (Sandbox Code Playgroud)

小智 17

关于上面的答案,重要的是要知道Application.DecimalSeparator并且Application.International(xlDecimalSeparator)行为方式不同:

  • Application.DecimalSeparator 即使告诉Excel使用系统分隔符(来自Windows区域设置),也总是输出在Excel选项中选择的小数分隔符
  • Application.International(xlDecimalSeparator)将输出Excel使用的实际小数分隔符,无论它来自Windows设置(何时Application.UseSystemSeparators = True)还是来自Excel选项(何时Application.UseSystemSeparators = False)

因此,我强烈建议永远使用Application.International(xlDecimalSeparator).


GSe*_*erg 11

我实际上并不知道接受本地化公式的Formulas FormatConditions.在其他地方,你可以选择FormulaFormulaLocal.

要简单回答问题,您可以使用Application.DecimalSeparator或只是Application.International(xlDecimalSeparator)知道分隔符.

但是对于非平凡的公式,可能更容易将基于不变的基于英语语言环境的公式分配给Application.International(xlDecimalSeparator)隐藏单元格的属性,然后Application.DecimalSeparator从该单元格读取并使用它Formula.Excel将为您完成所有转换.

  • @WaiWong它们通常不一样,但默认情况下它们是相同的.`International`告诉您来自语言环境的实际信息并且是只读的.`DecimalSeparator`允许您将任何其他字符指定为分隔符,并将其与`UseSystemSeparators = False`一起使用. (3认同)
  • Application.International(xlDecimalSeparator) 有效,而 Application.DecimalSeparator 无效。他们不应该做同样的事情吗? (2认同)

SBI*_*SBI 9

您可以使用DecimalSeparator属性.

Application.DecimalSeparator 然后返回由运行excel的语言环境定义的小数分隔符.

在旁注:尽管可能,但建议不要改变这一点,而是将其用于满足您的需求.


Eri*_*k A 7

对于 Excel 以外的应用程序,已接受答案中的解决方案不可用。

相反,您可以使用Format来检索小数点分隔符: in 中未转义的点Format被当前的小数点分隔符替换。

DecimalSeparator = Format(0, ".")
Run Code Online (Sandbox Code Playgroud)

您还可以从注册表中查找小数点分隔符

DecimalSeparator = CreateObject("WScript.Shell").RegRead("HKCU\Control Panel\International\sDecimal")
Run Code Online (Sandbox Code Playgroud)