【问题标题】:How to use NumberFormat method inside a loop in vba如何在 vba 的循环中使用 NumberFormat 方法
【发布时间】:2017-06-05 01:20:17
【问题描述】:

我是 VBA 的新手,我有一个范围,当范围内的值小于 0 时,我会将该值乘以 1000,然后使用 NumberFormat 方法更改其格式。但不知何故,它不起作用。错误代码在这一行:RngToThousand.NumberFormat = "$-#,##0,""K"""。错误说“需要对象”,我猜数据类型有问题。任何帮助将不胜感激,谢谢。

下面是我的代码:

Dim Rng As Range
Dim RngToNum As Range
Set RngToNum = Range("H2:J21")
For Each Rng In RngToNum
    If Rng.Value < 0 Then
        RngToThousand = Rng.Value * 1000
        RngToThousand.NumberFormat = "$-#,##0,""K"""
    Else: Rng.NumberFormat = ""
    End If
Next

【问题讨论】:

  • 你在哪里声明 RngToThousand?它应该是一个范围对象。是吗?
  • 你为什么要乘以 1000?如果原始数字是 -4000,您最终将显示 $-4,000K,它太大了 1000 倍(假设您使用 K 表示数千)。
  • 没有足够的上下文来回答这个问题 IMO。变量突然冒出来,这不是minimal reproducible example... 它几乎无法编译。确保你的模块顶部有Option Explicit:如果你的代码仍然可以编译,那么你需要edit你的帖子,这样我们就可以看到RngToThousand来自哪里。
  • 您可以在 1 行中为整个范围完成所有操作RngToNum.NumberFormat = "[&lt;0]""$""#,""$-""#,##0,""K"";"another format for else"

标签: vba excel


【解决方案1】:

NumberFormat 需要 Range 等对象,而您的 RngToThousand 变量不是对象。我测试了以下,它工作正常:

    If Rng.Value < 0 Then
        Rng.Value = Rng.Value * 1000
        Rng.NumberFormat = "$-#,##0,""K"""
    ...

【讨论】:

  • 你的意思可能是Rng.Value &gt; 0 - 大于零。
  • 有效!如果我想为 Rng.Value * 1000 分配一个新对象,而不是使用 Rng.Value,如何实现?
  • @JonX 您可以使用以下方法创建新对象:Set rngNew = Range("K2") 然后为其赋值:rngNew.Value = rng.Value * 1000
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-18
  • 2020-02-22
  • 1970-01-01
  • 2019-08-15
  • 1970-01-01
相关资源
最近更新 更多