我正在尝试将整个工作表或一系列数据从一个工作簿复制到另一个工作簿。我可以手动成功地做到这一点,方法是选择所有包含数据的单元格并粘贴到新创建的工作表中(保持日期格式)。但是,当我尝试通过 VBA 执行此操作时,任何一天大于 12 的日期都会转换为文本 [美国 (m/dd/yyyy)/澳大利亚 (dd/mm/yyyy) 格式更改]。我已经尝试将单元格首先格式化为美国格式日期,但这没有帮助。有什么建议吗?
仅供参考 - 源数据来自由 VBA 打开的 CSV 文件 - 日期值是在打开时自动转换为日期的文本(例如“2/08/2013”或“31/07/2013”)(IsNumber = True 和IsText = 假)。
打开的 CSV 看起来像这样(3000 奇数行的样本):请注意,“日期”和“上次更新”字段采用 dd/mm/yyyy hh:mm 格式
Id Title Division Status Date Last update
REQ:7619 Job Details ICTIS InProg 31/07/2013 13:03 6/08/2013 15:51
REQ:7617 Job Details ICTIS InProg 31/07/2013 12:06 2/08/2013 11:34
REQ:6994 Job Details ICTIS Open 31/07/2013 12:05 31/07/2013 12:05
REQ:7613 Job Details MNHD User 31/07/2013 12:01 1/08/2013 15:59
INC:79210 Job Details ICTIS Open 31/07/2013 12:00 31/07/2013 12:00
代码的简单摘录:
'Select all Data Cells
Sheets(1).Cells(1, 1).Activate
ActiveCell.SpecialCells(xlLastCell).Select
LastRow = ActiveCell.Row
'Format Date Fields to avoid automatic translation issue
'This does not help problem... so commented out
'Columns("M:M").Select
'Selection.NumberFormat = "m/d/yyyy"
'Select all data in sheet and copy
range("A2:" & LastCol & LastRow).Select
selection.Copy
'Rest of code moves to previous sheet and copies into cell A8
运行上述代码后的相同文件。请注意 day>12 的日期与 day<=12 的日期的处理方式不同。2013 年 7 月 31 日添加了“PM”,而 2013 年 6 月 8 日和 2013 年 2 月 8 日则交换了日期和月份!
Id Title Division Status Date Last update
REQ:7619 Job Details ICTIS In Progress 31/07/2013 1:03:49 PM 8/06/2013 15:51
REQ:7617 Job Details ICTIS In Progress 31/07/2013 12:06:31 PM 8/02/2013 11:34
REQ:6994 Job Details ICTIS Open 31/07/2013 12:05:50 PM 31/07/2013 12:05:50 PM
REQ:7613 Job Details MNHD With User 31/07/2013 12:01:46 PM 8/01/2013 15:59
INC:79210 Job Details ICTIS Open 31/07/2013 12:00:52 PM 31/07/2013 12:00:52 PM
我的快速解决方法是将代码分成两部分 - 由 MsgBox 提示手动复制/粘贴。不是很优雅!!并且容易出错。