在数组中分配新值时,VBA应用程序定义的错误

时间:2013-04-04 18:38:03

标签: vba excel-vba excel

我正在尝试编写一个接受变量数组(2维)的函数,然后遍历它并将所有日期更改为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

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

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

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

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

我使用MS-Access 2007 VBA通​​过从UBound语句中删除.value来测试它,因为它不会在Access中编译。我希望这对你有用,就像它对我一样(我没有问题,将一个定义为Dim arr(1到5,1到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

答案 2 :(得分:0)

感谢无论是谁在研究我的问题。

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

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

感谢您的帮助!