我在一个电子表格中有一个VBA函数,它在一个早期阶段打开的另一个电子表格上运行。这个宏曾经很好用,但最近开始在运行时导致1004错误(“无法获取WorksheetFunction类的RoundDown属性”)。
我认为我知道错误的原因(运行RoundDown时出现问题),但我看不到为什么会在我的宏中触发它,奇怪的是当我进入调试模式并在VBE中逐步执行代码时,错误不会再次发生(尽管显然没有任何变化)。
是否有人遇到过这种错误不一致地发生,并知道我该怎么做才能解决它?
我对VBA / Excel相当熟悉,但如果有关于更进一步诊断的建议,则将不胜感激。我想知道是否存在打开的电子表格未准备好的问题,但我看不到原因。
这里是代码。错误发生在标有注释的那一行。
Public Function GetDatesA(sWorkbookname As String, sSheetname As String, sCell As String) As Variant
Dim vDateList() As Variant
Dim currentCell As Range
Dim n As Long
Set currentCell = Workbooks(sWorkbookname).Worksheets(sSheetname).Range(sCell)
n = 0
Do
If Trim(currentCell.Value) = "" Then
Exit Do
Else
ReDim Preserve vDateList(0 To 1, 0 To n)
vDateList(0, n) = WorksheetFunction.RoundDown(currentCell.Value, 0) 'error occcurs on this line
vDateList(1, n) = currentCell.Column
'Debug.Print currentCell.Value
End If
Set currentCell = currentCell.Offset(0, 1)
n = n + 1
Loop While currentCell.Column < XL_LAST_COLUMN
GetDatesA = vDateList
End Function
其他详细信息如下:
Excel版本:2010
要打开的文件位于本地C驱动器上;我的宏存储在网络上的一个电子表格中
两个文件的文件格式均为 .xls(即 Excel 2003)- 我无法更改此选项
Windows 7(并不认为这会有关系)
我已经尝试过的两点是:
替换其他工作表函数(例如 Min(currentCell)),但仍然出现相同的问题
如果文件已经打开,似乎就不会出现问题。我想知道是否有一种方法可以禁用正在被打开的工作簿(而不是包含宏的主工作簿),是否会干扰此过程。但即使出现这种情况,我也不确定该如何解决!
有任何想法吗?
vDateList(0, n) = WorksheetFunction.RoundDown(currentCell.Value, 0)
之前插入Debug.Print currentCell.Value
,你会得到什么?它是一个有效的数字吗? - Siddharth RoutWorksheetFunction.RoundDown(currentCell.Value, 0)
更改为Application.WorksheetFunction.RoundDown(currentCell.Value, 0)
。 - Siddharth Rout