问题:
当数组分配给一个范围时,64 位 Excel VBA 有一个讨厌的习惯,就是将数组日期转换为数字。另一方面,32 位 VBA 保留日期格式。
例子:
下面是一些示例代码来演示不同的日期处理:
Sub test()
Dim arr(0 to 1) As Variant
arr(0) = "Text"
arr(1) = #9/12/2007#
ActiveSheet.Range("A1:B1") = arr
End Sub
(请注意,如果使用单个日期值,则日期不会在 64 位 Excel 中转换;必须存在第一个文本值)
结果:
在 32 位 Excel 中运行时,输出为Text, 9/12/2007
在 64 位 Excel 中运行时,输出为Text, 39337
就好像 64 位 VBA 只对所有范围对象使用 Value2 属性。
问题:
如何在不编写函数来处理所有数组写入的情况下让 64 位 VBA 表现得像 32 位 VBA?
只是为了阻止可能的善意回应:我知道这些单元格之间的基本公式保持不变。然而,32 位 Excel 会自动将正确的单元格设置为日期格式,这大大简化了我的代码。