【发布时间】:2012-05-17 11:40:19
【问题描述】:
我在电子表格中有一个 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,你会得到什么?这是一个有效的数字吗? -
也将
WorksheetFunction.RoundDown(currentCell.Value, 0)改为Application.WorksheetFunction.RoundDown(currentCell.Value, 0) -
谢谢!我试了一下。我得到一个日期列表(实际上是数字 - 它们显示为日期,除非我乘以 1 以获得与日期对应的基础 Excel 数字)。如果我逐步执行代码,但如果我让它自己运行(当它拉回完全相同的值时),这些肯定会很好地完成,所以它可能是关于 WorksheetFunction 而不是我的坏数据。我现在正在使用“On Error...” - 它似乎只是第一次出错,所以可能是首先使用 On Resume Next 进行任意 WorksheetFunction 调用,然后再关闭。
-
你尝试我的第二个建议了吗?
标签: excel excel-2010 vba