如何在单元格中的文本之后添加日期

时间:2016-03-03 17:46:57

标签: excel vba excel-vba

我有一个单元格 B8 目前使用货币格式进行格式化,我们只需调用 Sheet1 。我确信这是我需要在VBA中完成的事情,但是将Excel添加到单元格B8末尾的过程是什么:

as of 'MM/DD/YY'日期是今天(不关心日期是否自动更新,例如我是否在VBA进入今天的日期后保存工作簿,如果我明天重新打开它可以显示原始日期或新日期 - 没有区别,因为它将以不可编辑的格式保存)

因此,考虑到单元格采用货币格式(不包括小数点btw),我输入的数字如" 10000 ",单元格应该显示以下内容:

$10,000 as of 03/03/16

有什么建议吗?

2 个答案:

答案 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单元格中的值仍可用于计算和比较。

cnf_as_of

注意单元格中的数字式右对齐。如果列的宽度不足以显示整个模糊,则最终会使用########。

答案 1 :(得分:1)

选择任何单元格并使用此类宏来应用今天的数字格式。此格式是静态的,不会更改(除非您重新运行宏)。

我是从录制的宏中得到的,我使用了#34; Custom"格式并应用一个简单的字符串,如下所示:

enter image description here

这给了我一些基本代码,如:

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