我有一个单元格 B8 目前使用货币格式进行格式化,我们只需调用 Sheet1 。我确信这是我需要在VBA中完成的事情,但是将Excel添加到单元格B8末尾的过程是什么:
as of 'MM/DD/YY'
日期是今天(不关心日期是否自动更新,例如我是否在VBA进入今天的日期后保存工作簿,如果我明天重新打开它可以显示原始日期或新日期 - 没有区别,因为它将以不可编辑的格式保存)
因此,考虑到单元格采用货币格式(不包括小数点btw),我输入的数字如" 10000 ",单元格应该显示以下内容:
$10,000 as of 03/03/16
有什么建议吗?
答案 0 :(得分:2)
您可以保留键入B8的原始数值,同时显示货币符号和小数位以及',如mm / dd / yy'部分,但日期仅显示。
复制此代码并将其粘贴到工作表的代码表中(右键单击ws name选项卡,查看代码)。
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("B8")) Is Nothing Then
On Error GoTo bm_Safe_Exit
Application.EnableEvents = False
Dim str As String
str = Range("B8").NumberFormat
If CBool(InStr(1, str, "\a\s of", vbTextCompare)) Then _
ThisWorkbook.DeleteNumberFormat NumberFormat:=str
str = Format(Date, " \a\s of dd-mmm-yyyy")
str = StrConv(str, vbUnicode)
str = Join(Split(str, vbNullChar), Chr(92))
str = Left(str, Len(str) - 1)
str = "$#,##0" & str & ";[Red]($#,##0)" & str
Range("B8").NumberFormat = str
'Debug.Print str
End If
bm_Safe_Exit:
Application.EnableEvents = True
End Sub
您不会构建一些无用的自定义数字格式,因为在分配新的格式之前会删除每种格式;即使它是同一个。 B8单元格中的值仍可用于计算和比较。
注意单元格中的数字式右对齐。如果列的宽度不足以显示整个模糊,则最终会使用########。
答案 1 :(得分:1)
选择任何单元格并使用此类宏来应用今天的数字格式。此格式是静态的,不会更改(除非您重新运行宏)。
我是从录制的宏中得到的,我使用了#34; Custom"格式并应用一个简单的字符串,如下所示:
这给了我一些基本代码,如:
Selection.NumberFormat = "$#,##0_)"" foo"";[Red]($#,##0)"" foo"""
请注意双引号。有时这部分工作有点棘手。然后根据此标准修改它:
Sub Macro2()
'
' Macro2 Macro
Dim dt As String
dt = """ as of " & Format(Now(), "[$-409]mmmm d, yyyy;@") & """"
Selection.NumberFormat = _
"$#,##0_)" & dt & ";[Red]($#,##0)" & dt
End Sub