录制宏将英国格式日期转文本却返回美国格式的问题
解决VBA宏中TextToColumns转换英国日期为文本时变成美国格式的问题
这个问题我太熟悉了——手动操作Text to Columns能正常识别英国日期(日/月/年),但宏一跑就变成美国格式(月/日/年),核心问题出在你代码里的FieldInfo参数设置上。
问题根源
你代码里的FieldInfo :=Array(1, 2),这里的数字2对应的是Excel常量xlMDYFormat,也就是月/日/年的美国日期格式规则。而英国格式是日/月/年,对应的常量是xlDMYFormat,值为4。VBA执行时不会像手动操作那样自动识别单元格里的日期格式,只会严格遵循你指定的FieldInfo规则,所以才会出现格式反转的情况。
解决方案:修正FieldInfo参数
只需要把FieldInfo数组里的2替换成4,就能让宏按照英国日期格式解析并转换为文本。修改后的代码如下:
' 处理E列 Selection.TextToColumns Destination:=Range("E1"), DataType:=xlDelimited, _ TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _ Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _ :=Array(1, 4), TrailingMinusNumbers:=True ' 把2改成4 ' 处理F列 Columns("F:F").Select Selection.TextToColumns Destination:=Range("F1"), DataType:=xlDelimited, _ TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _ Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _ :=Array(1, 4), TrailingMinusNumbers:=True ' 同样把2改成4 ' 复制粘贴部分不变 Columns("A:P").Select Selection.Copy Windows("Xero Upload Template V2.xlsx").Activate Range("A4").Select ActiveSheet.Paste
额外优化建议(可选)
如果担心系统区域设置干扰,或者想更稳妥地保留原始文本格式,可以在执行TextToColumns前先把目标列设置为文本格式:
' 先把E、F列设为文本格式 Columns("E:F").NumberFormat = "@" ' 再执行TextToColumns...
这样就能确保转换后的文本完全遵循英国日期格式,不会被自动转换成美国格式啦。
内容的提问来源于stack exchange,提问作者codingbryan
相关产品推荐
相关产品推荐

