如何调整32位和64位Excel VBA日期处理之间的差异?

Vij*_*hti 6 excel vba excel-vba

问题:

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
Run Code Online (Sandbox Code Playgroud)

(请注意,如果使用单个日期值,则不会在64位Excel中转​​换日期;必须具有第一个文本值)

结果:

在32位Excel中运行时,输出为 Text, 9/12/2007

在64位Excel中运行时,输出为 Text, 39337

就好像64位VBA仅对所有范围对象使用Value2属性.

题:

如何在不编写处理所有数组写入的函数的情况下使64位VBA表现得像32位VBA?

只是为了阻止可能的善意回应:我知道这些细胞之间的基本公式保持不变.但是,32位Excel会自动将正确的单元格设置为日期格式,从而大大简化了我的代码.

Ash*_*han 1

我之前遇到过这样的问题,并通过确保单元格格式始终设置为日期格式来解决它。

像这样的事情应该可以解决问题:

Range("A1").Select
Selection.Format = "long date"
Run Code Online (Sandbox Code Playgroud)