VBA格式功能被忽略

时间:2019-08-16 14:31:34

标签: excel vba

我有此代码:

Sub NewSummary()
    Set ws = ThisWorkbook.Sheets("Sheet1")
    iWorking = 3
    iTotal = 4
    dPercent = iWorking / iTotal
    pPercent = Format(dPercent, Percent)
    sWorking = iWorking & " / " & iTotal
    sWorking = Format(sWorking)
    ws.Cells(1, 1).Value = sWorking
    ws.Cells(2, 1).Value = pPercent
End Sub

我期望的输出是:
3/4,75.00%

但是我得到的是:
3月4日,0.75

Excel会覆盖“ 3/4”字符串,并假设我想要一个日期。我该如何抑制呢?为什么Format函数不能将0.75转换为75.00%?

2 个答案:

答案 0 :(得分:2)

您不能像这样格式化字符串。 /周围的空格是一个问题,但更普遍的是,将"3/4"格式化为字符串文字依赖于某些隐式类型转换,在这种情况下,它假定为日期字符串(表示3月4日美国语言环境),这就是为什么您会获得类似日期的结果。

简单地做:

Option Explicit

Sub NewSummary()
    Dim ws As Worksheet

    Dim iWorking As Long, iTotal As Long
    Dim dPercent As Double
    Set ws = ThisWorkbook.Sheets("Sheet1")

    iWorking = 3
    iTotal = 4
    dPercent = iWorking / iTotal
    ws.Cells(1, 1).Value = Format(dPercent, "0.00%")

End Sub

答案 1 :(得分:0)

支持

Named numeric formats,但它们不是您可以像其他任何变量一样使用的语言级关键字。如David所述,Percent只是一个未声明的局部变量,它具有一个Variant/Empty值(这意味着您的模块缺少Option Explicit)。

在字符串文字中提供命名格式:

pPercent = Format(dPercent, "Percent")

尽管这可行,但我个人更喜欢使用explicit number formatting,这样您就可以对数字格式进行显式和完全控制;例如,如果您想要一个小数或需要两个以上的小数,则使用命名格式将不会删减它。