0

我正在尝试编写一个函数,该函数接受一个变体数组(二维),然后遍历它并将所有日期更改为 long。

Private Function mlDateHelper(a As Variant)
    Dim i, j As Integer
    For i = 1 To UBound(a.value, 1)
        For j = 1 To UBound(a.value, 2)
            If IsDate(a(i, j)) Then
                a(i, j) = CLng(a(i, j)) 'This line errors out
            End If
        Next j
    Next i
    mlDateHelper = a
End Function

基本上,我只是在两个维度上遍历数组,每当有日期时,我都会尝试将该日期重置为 long。

当我调试它时,我可以告诉它正确地计算CLng(a(i, j)),但是当它试图将该值分配给 a(i, j) 时它会崩溃。

它给了我一个“应用程序定义或对象定义的错误”。想法?谢谢你的帮助!

4

3 回答 3

1

如果 a 始终是一个范围,您可能应该利用这个事实:

Private Function mlDateHelper(a As Range)
Dim c As Cell
For each c in a.Cells
    c.Value = CLng(c.Value)
Next
End Function
于 2013-04-04T19:07:57.413 回答
0

我使用 MS-Access 2007 VBA 通过从 UBound 语句中删除 .value 来测试它,因为它不会在 Access 中编译。我希望这对你有用(我对将定义为 Dim arr(1 To 5, 1 To 7) 的数组传递给以下函数的赋值没有问题:

Private Function mlDateHelper(a As Variant)
    Dim i, j As Integer
    For i = 1 To UBound(a, 1)
        For j = 1 To UBound(a, 2)
            If IsDate(a(i, j)) Then
                a(i, j) = CLng(a(i, j)) 'This line errors out
            End If
        Next j
    Next i
    mlDateHelper = a
End Function
于 2013-04-04T18:57:16.543 回答
0

感谢任何正在调查我的问题的人。

我实际上发现我不需要这个函数,因为我可以简单地使用a.Value2Variant 的属性,它不会尝试将日期转换为日期。

根据我发现的文档:“此属性和 Value 属性之间的唯一区别是 Value2 属性不使用 Currency 和 Date 数据类型。您可以使用这些数据类型将格式化为浮点数的值返回双数据类型。

感谢您的帮助!

于 2013-04-04T19:02:57.720 回答