我做了一个宏来从 word 文档中提取日期,然后放入 excel 中。我在 word 中有一个日期选择器内容控件。我的电脑上的语言环境设置为意大利语 DD/MM/YYYY,我的日期选择器 word 语言环境设置为意大利语 DD/MM/YYYY。在我的日期选择器上,我看到的日期例如是 08/06/2017。现在我使用:
Activeworkbook.Sheets("Sheet1").Range("A1") = objwdDoc.ContentControls(12).Range.Text
但我得到了 06/08/2017 我试过:
Activeworkbook.Sheets("Sheet1").Range("A1") = format(objwdDoc.ContentControls(12).Range.Text, "DD/MM/YYYY")
但我得到的日期是 06/08/2017
如果我使用:
Activeworkbook.Sheets("Sheet1").Range("A1") = format(objwdDoc.ContentControls(12).Range.Text, "MM/DD/YYYY")
我确实得到了正确的日期
我使用如下变量检查 vba 代码:
date1 = format(objwdDoc.ContentControls(12).Range.Text, "MM/DD/YYYY")
Activeworkbook.Sheets("Sheet1").Range("A1") = date1
并且在调试中我的 date1 变量是正确的:08/06/2017
当我在 Excel A1 中检查时,我得到了 06/08/2017,并且该单元格的格式为“短日期,dd/MM/YYYY”)
为什么?
答案1
我有两种方法可以解决日期问题(爱尔兰日期格式与意大利日期格式相同)。这是因为美国日期格式是 MM/DD/YYYYY,有时当可以使用任意一种格式时,它又回到了基本格式。为了防止这种情况发生,我会做以下事情(在可能的情况下)
- 为了防止 Excel 表破坏格式,我在读取时将其转换为 yyyyMMdd 并保存为整数。
- 为了强制在写回 excel 时使用正确的外观,我使用了德语格式,人们可以阅读和理解这种格式,但 excel 无法在非德语设置下识别为日期,即 DD.MM.YYYY
这与其说是一种解决方案,倒不如说是一种变通方法。