【问题标题】:Excel: Working with named Range.NumberFormat in VBA: "General" vs. "Standard"Excel:在 VBA 中使用命名 Range.NumberFormat:“常规”与“标准”
【发布时间】:2011-11-09 11:47:21
【问题描述】:

这里有几个关于 Range.NumberFormat 的问题——希望有人可以提供现成的答案,因为使用所有通用术语搜索网络很困难。

一点背景知识:我正在尝试消除“随机”错误 1004 代码:无法设置 Range 类的 NumberFormat 属性是消息。当我尝试将 late-bound 对象的 .NumberFormat 设置为命名格式时发生错误,主要使用“常规”或“标准”。在 99% 的情况下,对象是 Application.Selection。另请注意,此错误的最常见原因 - 工作表或工作簿上的保护 -在此处不适用

  1. 从 Excel 2003 到 2007,Microsoft 似乎在 VBA 中引入了一个错误。如果在即时窗口中输入? Selection.NumberFormat 并按Enter,我会得到“General”。如果我用某些插件(不是全部,不可预测)运行带有断点的宏做同样的事情,我通常会得到“标准”。什么是“标准”?那是从哪里来的?我想从一个单元格中选择一种数字格式,然后将其放到另一个单元格中;在随机的时刻,我不能以这种方式应用“标准”,它的结果不像一般。 (在 Excel 2003 中,它永远不会出现在即时窗口中,并且无法系统地应用。)

  2. 即使我将“标准”的所有实例都转换为“常规”,在MyObject.NumberFormat = "General" 上有时仍会出现错误。我在几个地方读到过,最好应用命名格式的底层格式,即 General 适用于某些东西(正如我认为标准那样);在 Excel VBA 中执行此操作的语法是什么?

提前感谢您的帮助。

【问题讨论】:

    标签: excel excel-2007 excel-2003 vba


    【解决方案1】:

    这可能不是一个完整的解决方案,但它是一个开始:

    我相信在某些语言中使用“标准”而不是“通用”。您应该将结果与 .NumberFormatLocal 进行比较。

    对于解决方案部分,如果您尝试将 NumberFormat 设置为“General”并出现错误,则只需将 NumberForamt 设置为空字符串。这将自动使 NumberFormat 通用/标准。

    selection.NumberFormat = ""
    

    【讨论】:

    • 同意,这很成功。不敢相信我不知道空字符串的把戏!我将把它打开一段时间,只是为了引起对任务的另一部分的注意:如何从格式名称中获取格式字符串。
    • PS,供将来参考:是的,正如 Banjoe 所建议的那样,上面第 1 点中提到的错误行为主要发生在外国区域设置(例如法语)中,无论出于何种原因,VBA 都在使用 @987654322 @作为.NumberFormat
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-07
    • 2022-01-23
    • 1970-01-01
    • 2011-12-08
    相关资源
    最近更新 更多