You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

VBA宏Word文档日期替换大写改小写问题求助

解决Word宏中日期大写转小写的问题

我来帮你搞定这个日期大小写的问题!你的核心需求是把生成的葡萄牙语长日期从大写改成小写,同时我还发现代码里有个小bug需要一起修正,咱们一步步来:

1. 日期转小写的关键修改

葡萄牙语的月份名默认生成时是首字母大写的,咱们只需要用LCase()函数把WorksheetFunction.Text生成的日期字符串整个转成小写就行。修改替换文本的代码如下:

.Replacement.Text = LCase(WorksheetFunction.Text(Date, "[$-pt-PT]dd ""de"" mmmm ""de"" yyyy"))

同样,针对Excel单元格C9的日期也做相同处理:

.Replacement.Text = LCase(WorksheetFunction.Text(w_data.Range("C9"), "[$-pt-PT]dd ""de"" mmmm ""de"" yyyy"))

2. 修正代码中的对象清理错误

你的代码里把对象清理语句Set wdApp = Nothing...放在了Next wdRng前面,这会导致第一次循环结束就直接销毁了Word对象,后续循环会报错。得把这段清理代码移到循环结束之后。

完整修正后的代码

Sub test_date()
    Dim wdApp As Word.Application
    Dim wdDoc As Word.Document
    Dim wdRng As Word.Range
    Dim w_data As Worksheet
    
    Set w_data = ThisWorkbook.Worksheets("DATA")
    Set wdApp = CreateObject("word.application")
    wdApp.Visible = True
    Set wdDoc = wdApp.Documents.Open("C:\Users\*******") ' 记得替换成你的实际文件路径
    
    For Each wdRng In wdDoc.StoryRanges
        With wdRng.Find
            .Text = "D_H"
            .Replacement.Text = LCase(WorksheetFunction.Text(Date, "[$-pt-PT]dd ""de"" mmmm ""de"" yyyy"))
            .Wrap = wdFindContinue
            .Execute Replace:=wdReplaceAll
            
            .Text = "D_VL"
            .Replacement.Text = LCase(WorksheetFunction.Text(w_data.Range("C9"), "[$-pt-PT]dd ""de"" mmmm ""de"" yyyy"))
            .Wrap = wdFindContinue
            .Execute Replace:=wdReplaceAll
        End With
    Next wdRng
    
    ' 对象清理放在循环之后执行
    Set w_data = Nothing
    Set wdRng = Nothing
    Set wdDoc = Nothing
    Set wdApp = Nothing
    
    MsgBox ("test finished")
End Sub

补充说明

  • LCase函数会把整个日期字符串转成小写,比如葡萄牙语的Janeiro会变成janeiro,完全符合你的需求。
  • 确保Excel中C9单元格的内容是有效的日期格式,这样WorksheetFunction.Text才能正确转换格式。

内容的提问来源于stack exchange,提问作者José Dias Neves

火山引擎 最新活动