excel WorksheetFunction.CountA -升级到Office 2010后不工作

0mkxixxg  于 2022-12-14  发布在  其他
关注(0)|答案(6)|浏览(158)

以下代码段在2010之前的Excel中有效:

myRange = Range("A:A")
NumRows = Application.CountA(myRange)

A列中有38个包含文本/值的单元格。在Excel 2007中运行该代码时,NumRows的正确计算结果为38,但在Excel 2010中,它(错误地)计算结果为65,536。
在两个版本中,都可以在单元格内输入CountA函数。
类似的线程是question 16696891,但没有答案和建议,我认为,红鲱鱼...
有什么想法吗?

zhte4eai

zhte4eai1#

我不确定您的问题到底出在哪里,因为我无法让您的代码按照编写的那样工作。有两件事似乎很明显:
1.您似乎依赖VBA来确定变量类型并进行相应的修改。如果不小心,可能会使您感到困惑,因为VBA可能会分配您不希望的变量类型。在代码中,Range类型应分配给myRange。由于Range类型在VBA中是一个对象,因此它必须是Set,如下所示:Set myRange = Range("A:A")
1.使用工作表函数CountA()时,应使用.WorksheetFunction调用
如果您还没有这样做,请考虑使用模块顶部的Option Explicit选项,并使用Dim语句输入变量,就像我在下面所做的那样。
下面的代码在2010年对我来说是有效的。希望它对你也是有效的:

Dim myRange As Range
Dim NumRows As Integer

Set myRange = Range("A:A")
NumRows = Application.WorksheetFunction.CountA(myRange)

祝你好运

ej83mcc0

ej83mcc02#

这个来自另一个论坛的回答解决了问题。
(用您自己的范围替换此处显示的“I:I”)
回复:CountA在VBA中不起作用

Should be:

Nonblank = Application.WorksheetFunction.CountA(Range("I:I"))

You have to refer to ranges in the vba format, not the in-excel format.
q3qa4bjr

q3qa4bjr3#

以下代码对我有效:

Sub test()
    Dim myRange As Range
    Dim NumRows As Integer

    Set myRange = Range("A:A")
    NumRows = Application.WorksheetFunction.CountA(myRange)

    MsgBox NumRows
End Sub
4urapxun

4urapxun4#

看起来在VB7和VB6中,Application.COUNTA的工作方式有了变化。我在两个版本的VB中都尝试了以下方法。

ReDim allData(0 To 1, 0 To 15)
   Debug.Print Application.WorksheetFunction.CountA(allData)

在VB6中,这将返回0。
在VB7中,它返回32
看起来VB7不再认为COUNTA是COUNTA了。

tzxcd3kk

tzxcd3kk5#

这可能是显而易见的,但是,通过说明范围,而不包括哪个工作簿或工作表,那么它可能会试图在一个完全不同的工作表上CountA()。我发现完全解决这些问题节省了很多头痛。

gg0vcinb

gg0vcinb6#

工作簿中有多少工作表?打开工作簿时或从其他工作表(在同一工作簿中)时是否触发宏?
当引用的范围位于ActiveSheet之外的工作表中时,我使用WorksheetFunction.countA()得到了一些错误的结果,我建议先选择包含您要查找的数据的工作表,然后继续使用WorksheetFunction.countA()

相关问题