使用VBA将计算日期显示为法语的异常问题咨询
问题原因
- VBA内置
Format函数生成的日期文本默认遵循系统当前的区域语言设置,若系统默认语言为英语,mmmm占位符会直接输出英文月份,插入到Word后属于静态纯文本。 - 后续设置
Selection.LanguageID = wdFrench仅会修改选中内容的拼写/语法检查语言,不会自动翻译已生成的静态英文日期文本。 - 原代码生效是因为传入的是邮件合并日期域,Word对域内容会自动匹配所在区域的语言设置动态生成对应语言的日期格式,替换为
Date直接格式化后丢失了域的动态适配能力。
解决方法
场景1:需要保留日期的动态更新能力
使用Word日期域实现,语言设置生效后会自动适配法语格式,代码如下:
Sub FrenchFutureDate() ' 插入偏移30天的日期域,指定基础格式 Selection.Fields.Add Range:=Selection.Range, Type:=wdFieldDate, Text:="""+30"" \@ ""d mmmm yyyy""" ' 设置选中区域语言为法语 Selection.LanguageID = wdFrench ' 更新域以应用法语格式 Selection.Fields.Update ' 若不需要后续更新,可取消注释下一行转为静态文本 ' Selection.Fields.Unlink End Sub
场景2:直接生成静态法语日期,不受系统语言影响
提前定义法语月份数组匹配输出,完全规避系统区域设置的影响,代码如下:
Sub FrenchFutureDate() ' 定义法语月份数组 Dim frenchMonths As Variant frenchMonths = Array("janvier", "février", "mars", "avril", "mai", "juin", _ "juillet", "août", "septembre", "octobre", "novembre", "décembre") Dim targetDate As Date targetDate = Date + 30 ' 拼接生成法语格式日期 Selection.TypeText Text:=Day(targetDate) & " " & frenchMonths(Month(targetDate) - 1) & " " & Year(targetDate) Selection.LanguageID = wdFrench End Sub
内容的提问来源于stack exchange,提问作者ferreimi
相关产品推荐
相关产品推荐

