我发现了许多类似的问题,但从来没有一个不包括蛮力重新设计的解决方案。
使用这个简单的子程序:
Sub readwrite()
Dim arr As Variant
Dim i As Long
arr = Range("F2:F36").Value
For i = LBound(arr) To UBound(arr)
arr(i, 1) = CStr(arr(i, 1))
Next i
Range("G2:G36").Value = arr
End Sub
我从我的英国地区转换为美国日期格式,而不是这样:
我明白了:
注释掉 Cstr 行得到第一个结果。添加行:
arr(i, 1) = FormatDateTime(arr(i, 1), 0)
在 Cstr 行之后没有解决问题,也没有使用 Value2。
我意识到我可以通过蛮力循环来解决这个问题,但是我的现实世界问题需要在 32 列和数百行中的两列中不可预知地混合日期和空白字符串,所以我需要一些不昂贵的东西。
蛮力方法是确保在尝试写出工作表之前完成从日期到字符串并再次返回的所有转换:
arr(i, 1) = Format(arr(i, 1), "dd/mm/yyyy hh:mm")
arr(i, 1) = DateValue(arr(i, 1)) + TimeValue(arr(i, 1))
正如我所说,这是可行且有效的,只是有点问题。
我会很感激任何建议。我是一名软件测试员,同时也是一名相当高级的编码员。


