在VBA中将日期字符串转换为月份名称

时间:2014-07-29 02:10:26

标签: vba word-vba

宏搜索代码[DM],然后需要将“17/11/2013”​​找到的日期转换为“2013年11月17日”。到目前为止,我已经尝试了一些没有任何成功建议的选项,但我希望我需要将单元格文本链接为要格式化的文本。

Sub ChangeMonth()
Dim strCellText As String

'Change month numbers to words
Do
    Selection.HomeKey Unit:=wdStory
    Selection.Find.ClearFormatting
    With Selection.Find
        .Text = "[DM]"
        .Forward = True
        .Wrap = wdFindContinue
    End With
    If Selection.Find.Execute = False Then
        Exit Do
    Else
        Selection.Delete Unit:=wdCharacter, Count:=1
        Selection.SelectCell
        Debug.Print Format(CDate(strCellText), "DD-MMM-YYYY")
    End If
Loop


End Sub

1 个答案:

答案 0 :(得分:1)

只需尝试Format功能?

Debug.Print Format(#2014/01/01#, "DD/MMM/YYYY")

结果:

01/Jan/2014

同样适用于其他日期格式:

Debug.Print Format(#01/01/2014#, "DD-MMM-YYYY")

结果:

01-Jan-2014

Format函数将类似日期或日期的字符串作为其第一个参数。根据您拥有的数据,您可能需要将其包装在CDate中以确保正确的转换,例如:

Format(Cdate(var), "DD-MM-YYYY")
'assumes "var" is a variable which represents the date/string value

enter image description here

使用CDate将字符串强制转换为日期类型的另一个屏幕截图(虽然我不认为这是必要的,但以防万一):

enter image description here

在您的代码中,我做了一些更改:

Sub ChangeMonth()
Dim strCellText As String
Dim c As Selection
Dim rng As Range

'Change month numbers to words
Do
    Selection.HomeKey Unit:=wdStory
    Selection.Find.ClearFormatting
    With Selection.Find
        .Text = "[DM]"
        .Forward = True
        .Wrap = wdFindContinue
    End With
    If Selection.Find.Execute = False Then
        Exit Do
    Else
        Selection.Delete Unit:=wdCharacter, Count:=1
        Selection.SelectCell
        Set c = Selection
        'Set rng = c.Range.Words(1, c.Words.Count - 1)
        strCellText = Trim(Left(c.Text, Len(c.Text) - 2))
        'Debug.Print Format(CDate(strCellText), "DD-MMM-YYYY")
        Selection.Text = Format(CDate(strCellText), "DD-MMM-YYYY")
    End If
Loop


End Sub