Excel VBA WorksheetFunction.CountA - 升级到Office 2010后无法正常工作

Ric*_*Ell 8 worksheet-function

以下代码在2010年之前在Excel中运行:

myRange = Range("A:A")
NumRows = Application.CountA(myRange)
Run Code Online (Sandbox Code Playgroud)

在A列中有38个包含文本/值的单元格.当代码在Excel 2007中运行时,NumRows正确计算为38,但是,它(错误地)在Excel 2010中的计算结果为65,536.

CountA在两个版本中输入in-cell函数都可以正常工作.

类似的主题是问题16696891,但没有答案,我认为这些建议是红色的鲱鱼......

有任何想法吗?

Ins*_*ast 8

我不确定你的问题究竟是什么,因为我无法让你的代码按照书面形式工作.两件事似乎很明显:

  1. 您似乎依靠VBA来确定变量类型并相应地进行修改.如果您不小心,这可能会让人感到困惑,因为VBA可能会指定您不想要的变量类型.在您的代码中,Range应分配一种类型myRange.由于Range类型是VBA中的对象,因此需要Set如下所示:Set myRange = Range("A:A")
  2. 您CountA()应该使用工作表函数来调用.WorksheetFunction

如果您还没有这样做,请考虑使用模块顶部的Option Explicit选项,并使用Dim语句键入变量,如下所示.

以下代码在2010年适合我.希望它也适合你:

Dim myRange As Range
Dim NumRows As Integer

Set myRange = Range("A:A")
NumRows = Application.WorksheetFunction.CountA(myRange)
Run Code Online (Sandbox Code Playgroud)

祝好运.


Cal*_*mDA 2

这段代码对我有用:

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

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

    MsgBox NumRows
End Sub
Run Code Online (Sandbox Code Playgroud)