VBA触发Excel与Word邮件合并时日期月日颠倒问题咨询
问题原因
这是Office邮件合并的经典区域兼容性问题:默认数据源读取引擎会优先使用美国「月/日/年」格式解析日期值,即便系统和Excel都设置了英国「日/月/年」格式,也会把01/07/2021误判为1月7日,而非正确的7月1日。你之前添加的Format代码没有效果,是因为数据源读取阶段日期已经被解析错误,后续格式化的是已经出错的日期值。
解决方案(按实现优先级排序)
1. 数据源连接添加英国区域ID
在现有OpenDataSource方法的参数末尾新增LocaleID:=2057(2057为英国英语的区域编码),强制引擎用「日/月/年」规则解析日期,修改后代码如下:
.OpenDataSource Name:=StrMMSrc, ReadOnly:=True, AddToRecentFiles:=False, _ LinkToSource:=False, Connection:="Provider=Microsoft.ACE.DDE.12.0;User ID=Admin;" & _ "Data Source=StrMMSrc;Mode=Read;Extended Properties=""HDR=YES;IMEX=1"";", _ SQLStatement:="SELECT * FROM `FTR$`", _ LocaleID:=2057
2. SQL查询直接输出格式化后的日期文本
直接在查询阶段把日期转换为无歧义的文本,避免后续解析出错,修改SQL语句如下:
SQLStatement:="SELECT *, FORMAT(DUE, 'dd mmmm yyyy hh:mm AM/PM') AS DUE_FORMATTED FROM `FTR$`"
后续将Word模板中的合并域绑定到新生成的DUE_FORMATTED字段即可,不需要额外添加格式开关。
3. Word合并域添加区域规则开关
修改Word模板中的合并域,新增\l 2057参数指定用英国区域规则处理日期:
{MERGEFIELD DUE \@ "dd MMM yyyy hh:mm AM/PM" \l 2057}
内容的提问来源于stack exchange,提问作者LMORSE
相关产品推荐
相关产品推荐

