【发布时间】:2018-01-12 12:01:57
【问题描述】:
我有一个工作簿,用于从另一个我只有读取权限的工作簿中收集相关数据。我使用 Excel 的内置函数“数据连接”将后者连接到我自己的。复制这样的工作表,然后从复制的工作表中复制相关数据在我的情况下(是的,我测试过)更快(大约 30%),而不是打开所述工作簿,然后直接从源复制相关数据。
源中的默认日期格式是“dd/mm/yy”(尽管打开时显然会适应本地日期格式设置)。复制的工作表保持该日期格式,但是当复制区域设置为“英语-美国”的日期时,即使单元格格式为“dd/mm/yy”,Excel 也会假定源格式为“yy/mm/dd”。
问题就在这里: 并非我的工作簿的所有用户都可以使用本地日期格式“dd/mm/yy”,有些用户必须使用“mm/dd/yy”或“yy/mm/dd”。
当本地格式并不总是不同时,如何告诉 Excel 从特定日期格式复制到本地日期格式?
使用Application.International(xlDateOrder)检查本地格式,然后在格式不同时更改日期似乎是一种复杂的解决方法,我想避免。
源格式为dd/mm/yy,用TargetSheet.Cells(TargetRow, TargetColumn).Value = CDate(SourceSheet.Cells(SourceRow, SourceColumn).Value)复制后格式为dd/mm/yy,天为年,年为天。
【问题讨论】:
-
这些日期是真实日期(日期格式)还是文本字符串?对于日期,这应该没有任何问题(因为格式只是表示形式,在内部它是一个数值)。但是,使用 textstring,您可能会遇到很多问题
-
这可能取决于您复制的准确程度。您在多大程度上使用 VBA 来做到这一点?如果您正在使用它,请包含相关代码。但作为初学者,
CDate类型转换似乎足够智能,可以捕获许多格式(并将其转换为本地格式),Format可以修复此问题的某些变体,由于某种原因,CDate不会自动拾取这些变体:TargetWorksheet.Range("A1").Value = CDate(Format(SourceWorksheet.Range("A1"), "dd/mm/yy")) -
@FunThomas 即使函数状态格式也被复制,它们也必须被复制为文本字符串,否则我无法解释这里发生了什么。
-
@Vegard 请把它写成答案,所以我可以接受。