excel - 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
然后我还有一个问题:我可以重用现有的实例吗?
解决方案
永远不要使用通过 COM 打开的外部应用程序的全局变量!
WorksheetFunction
是一个全局对象。在 Excel 中使用它时,它会使用当前打开的应用程序对象调用工作表函数。
从 Access 中使用它时,它会使用某个应用程序对象(可能是打开的第一个 Excel 应用程序对象)调用工作表函数。这可能不是您当前使用的那个。因此,请始终明确您要调用哪个应用程序对象。
xl.WorksheetFunction.CountA(MyWorksheet.Range("A:A"))
另请注意,在使用后期绑定时,这是调用工作表函数的唯一方法,因此以这种方式使用它可以更轻松地切换到后期绑定,您通常希望这样做,以使应用程序与多个版本的 Office 一起工作,而无需调整参考。
推荐阅读
- matlab - Matlab中的样本t检验
- javascript - 当我长按键盘上的一个键时,事件输入错误页面
- android - 如何确保广播接收器保持运行并侦听传入的文本消息而不会被操作系统杀死
- javascript - 在 Javascript 循环中添加 2 个延迟
- tcl - 如何注册更改字符串并留下他的一部分?
- mongodb - $group 和 $max 操作 -Mongodb 后如何获取整个文档?
- mysql - orderBy 不使用关键字 laravel
- c++ - FFmpeg - RTCP BYE 数据包
- python - 使用下拉菜单抓取网络数据并单击一个按钮,该按钮可获取显示的表格
- c# - 如何从 Asp.net Core Razor 页面中的 IdentityUser 列表中获取没有角色的用户