以下代码在2010年之前在Excel中运行:
myRange = Range("A:A")
NumRows = Application.CountA(myRange)
在A列中有38个包含文本/值的单元格。当代码在Excel 2007中运行时,NumRows正确计算为38,但是,它(错误地)在Excel 2010中的计算结果为65,536。
在单元格中输入CountA
函数在两个版本中均可正常工作。
类似的线程是question 16696891,但没有答案,我认为这些建议是红色的鲱鱼......
有任何想法吗?
我不确定你的问题是什么,因为我无法让你的代码按照书面形式工作。两件事似乎很明显:
Range
分配一种myRange
。由于Range
类型是VBA中的一个对象,它需要是Set
,如下所示:Set myRange = Range("A:A")
CountA()
调用您对工作表函数.WorksheetFunction
的使用如果您还没有这样做,请考虑使用模块顶部的Option Explicit选项,并使用Dim
语句键入变量,如下所示。
以下代码在2010年适合我。希望它也适合你:
Dim myRange As Range
Dim NumRows As Integer
Set myRange = Range("A:A")
NumRows = Application.WorksheetFunction.CountA(myRange)
祝好运。
来自另一个论坛的答案解决了这个问题。
(用你自己的范围代替这里显示的“我:我”)
Re: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.
这段代码适合我:
Sub test()
Dim myRange As Range
Dim NumRows As Integer
Set myRange = Range("A:A")
NumRows = Application.WorksheetFunction.CountA(myRange)
MsgBox NumRows
End Sub
似乎Application.COUNTA在VB7和VB6中的工作方式有所改变。我在两个版本的VB中尝试了以下内容。
ReDim allData(0 To 1, 0 To 15)
Debug.Print Application.WorksheetFunction.CountA(allData)
在VB6中,它返回0。
Inn VB7它返回32
看起来VB7不再将COUNTA视为COUNTA了。
这可能是显而易见的,但是,通过声明范围并且不包括哪个工作簿或工作表,那么它可能完全在另一个工作表上尝试CountA()。我发现完全解决这些问题可以省去很多麻烦。