WorksheetFunction.CountA returns 在同一张工作表上使用不同的结果

WorksheetFunction.CountA returns different results when used on the same worksheet

我需要将一些数据从 Excel 加载到 Access 中,并在此过程中执行大量验证。为了知道我应该处理多少行,我使用 CountA 函数,然后我跳过列 A 中的空行并计算处理的行数。

NonEmptyRowCount = WorksheetFunction.CountA(MyWorksheet.Range("A:A"))

这在大多数情况下都运行良好。但是,有时 CountA returns 1,048,576 这是最大行数。我在用于测试的同一张工作表上遇到了这个问题。

最可靠的解决方法是什么?您知道如何修复 CountA 或任何替代方法吗?

我还注意到,当我没有在我的宏中正确关闭 Excel 时会发生这种情况,就像我在调试期间中断执行时一样。可能是这种情况吗?

Dim xl As New Excel.Application

那么我还有一个问题:我可以重用现有的实例吗?

切勿使用通过 COM 打开的外部应用程序的全局变量!

WorksheetFunction 是一个全局对象。从 Excel 使用它时,它会使用当前打开的应用程序对象调用工作表函数。

从 Access 使用它时,它会使用某个应用程序对象调用工作表函数,可能是第一个打开的 Excel 应用程序对象。这可能不是您当前使用的那个。因此,请始终明确您要调用哪个应用程序对象。

xl.WorksheetFunction.CountA(MyWorksheet.Range("A:A"))

另请注意,在使用后期绑定时,这是调用工作表函数的唯一方式,因此以这种方式使用它可以更轻松地切换到后期绑定,这也是您经常想做的,从而使应用程序适用于多个版本Office 而无需调整引用。