【问题标题】:Using a string variable to set value of .NumberFormat in Excel VBA使用字符串变量在 Excel VBA 中设置 .NumberFormat 的值
【发布时间】:2016-01-02 16:20:36
【问题描述】:

我正在尝试设置具有以下结果的自定义数字格式:
值“22,800”变为“欧洲:22.8 M”

我可以使用数字格式窗口来实现这一点,并使用:
“欧洲:”#,##0.0,“M”; "欧洲:" -#,##0.0, "M"

我也可以在 VBA 窗口中使用
实现这一点 ActiveCell.NumberFormat = """欧洲:"" #,##0.0, ""M""; ""欧洲:"" -#,##0.0, ""M"""

这是问题所在:我正在运行一个循环函数,该函数从不同的工作表中获取值并将它们粘贴到摘要表上 - 我需要区域(例如“欧洲”)显示在数字旁边,但我不想为我的 9 个区域编写 9 个不同时间的循环函数代码。

我尝试的解决方案,在这里我只是为每个循环更改变量“区域”的值:

Dim region As String
Dim numformat As String
region = "Europe"
numformat = Chr(34) + Chr(34) + Chr(34) + region + ":" + Chr(34) + Chr(34) + " #,##0.0, " + Chr(34) + Chr(34) + "M" + Chr(34) + Chr(34) + "; " + Chr(34) + Chr(34) + region + ":" + Chr(34) + Chr(34) + " -#,##0.0, " + Chr(34) + Chr(34) + "M" + Chr(34) + Chr(34) + Chr(34)
Selection.NumberFormat = numformat

将数字格式化为“Europe: #,##0.0, M; Europe: -#,##0.0, M” - 它根本不显示数字,只显示这个字符串。

但是,如果我在即时窗口中使用 ?numformat 来返回字符串的值,然后复制/粘贴该值以便
Selection.NumberFormat = """欧洲:"" #,##0.0, ""M""; ""欧洲:"" -#,##0.0, ""M"""

然后,我得到正确的数字格式,“欧洲:22.8 M”

但这对我没有帮助,因为现在区域名称又被硬编码了。谁能帮助找出我做错了什么,或找出替代解决方案?

干杯,

B

【问题讨论】:

  • 源数据中是否存在区域格式?
  • 源数据格式为标准数字格式,带有千位分隔符,没有小数点。它需要保持这种状态。区域是每个选项卡的名称。
  • 您可以创建一个像Const MasterNumFormat = """<CURR>:"" #,##0.0, ""M"";""<CURR>:"" -#,##0.0, ""M""" 这样的常量字符串,然后使用numformat = Replace(MasterNumFormat,"<CURR>",region) 而不是构造它。

标签: vba excel


【解决方案1】:

用途:

    numFormat = """" & region & ": ""#,##0.0,""M"";""" & region & ":"" -#,##0.0, ""M"""

或者,如果你真的想使用Chr(34),你不需要加倍它们,因为你不需要转义它们:

numFormat = Chr(34) & region & ": " & Chr(34) & "#,##0.0," & Chr(34) & "M" & Chr(34) & ";" & Chr(34) & region & ":" & Chr(34) & " -#,##0.0, " & Chr(34) & "M" & Chr(34)

【讨论】:

  • 谢谢罗里!奇迹般有效。我认为这只是我的语法错误。我现在意识到,在阅读了您的答案后,由于我的变量 numFormat 已经是字符串类型,因此在将其设置为 NumberFormat 的值时,我不需要将其括在引号中。这反过来意味着我不需要双引号来分隔数字格式中的文本。
猜你喜欢
  • 1970-01-01
  • 2017-11-16
  • 1970-01-01
  • 2022-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-17
  • 1970-01-01
相关资源
最近更新 更多