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 而无需调整引用。
我需要将一些数据从 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 而无需调整引用。