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




