首页 > 解决方案 > WorksheetFunction.CountA 在同一个工作表上使用时返回不同的结果

问题描述

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

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

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

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

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

Dim xl As New Excel.Application

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

标签: excelvbams-accesswindows-10

解决方案


永远不要使用通过 COM 打开的外部应用程序的全局变量!

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

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

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

另请注意,在使用后期绑定时,这是调用工作表函数的唯一方法,因此以这种方式使用它可以更轻松地切换到后期绑定,您通常希望这样做,以使应用程序与多个版本的 Office 一起工作,而无需调整参考。


推荐阅读