以下代码段在2010之前的Excel中有效:
myRange = Range("A:A")
NumRows = Application.CountA(myRange)
A列中有38个包含文本/值的单元格。在Excel 2007中运行该代码时,NumRows的正确计算结果为38,但在Excel 2010中,它(错误地)计算结果为65,536。
在两个版本中,都可以在单元格内输入CountA
函数。
类似的线程是question 16696891,但没有答案和建议,我认为,红鲱鱼...
有什么想法吗?
6条答案
按热度按时间zhte4eai1#
我不确定您的问题到底出在哪里,因为我无法让您的代码按照编写的那样工作。有两件事似乎很明显:
1.您似乎依赖VBA来确定变量类型并进行相应的修改。如果不小心,可能会使您感到困惑,因为VBA可能会分配您不希望的变量类型。在代码中,
Range
类型应分配给myRange
。由于Range
类型在VBA中是一个对象,因此它必须是Set
,如下所示:Set myRange = Range("A:A")
1.使用工作表函数
CountA()
时,应使用.WorksheetFunction
调用如果您还没有这样做,请考虑使用模块顶部的Option Explicit选项,并使用
Dim
语句输入变量,就像我在下面所做的那样。下面的代码在2010年对我来说是有效的。希望它对你也是有效的:
祝你好运
ej83mcc02#
这个来自另一个论坛的回答解决了问题。
(用您自己的范围替换此处显示的“I:I”)
回复:CountA在VBA中不起作用
q3qa4bjr3#
以下代码对我有效:
4urapxun4#
看起来在VB7和VB6中,Application.COUNTA的工作方式有了变化。我在两个版本的VB中都尝试了以下方法。
在VB6中,这将返回0。
在VB7中,它返回32
看起来VB7不再认为COUNTA是COUNTA了。
tzxcd3kk5#
这可能是显而易见的,但是,通过说明范围,而不包括哪个工作簿或工作表,那么它可能会试图在一个完全不同的工作表上CountA()。我发现完全解决这些问题节省了很多头痛。
gg0vcinb6#
工作簿中有多少工作表?打开工作簿时或从其他工作表(在同一工作簿中)时是否触发宏?
当引用的范围位于ActiveSheet之外的工作表中时,我使用WorksheetFunction.countA()得到了一些错误的结果,我建议先选择包含您要查找的数据的工作表,然后继续使用WorksheetFunction.countA()