我正在尝试编写一个接受变量数组(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)时它会崩溃。
它给了我一个“应用程序定义的或对象定义的错误”。思考?谢谢你的帮助!
答案 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数据类型的点数。“
感谢您的帮助!