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

问题描述 投票:7回答:5

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

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

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

在单元格中输入CountA函数在两个版本中均可正常工作。

类似的线程是question 16696891,但没有答案,我认为这些建议是红色的鲱鱼......

有任何想法吗?

worksheet-function
5个回答
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)

祝好运。


3
投票

来自另一个论坛的答案解决了这个问题。

(用你自己的范围代替这里显示的“我:我”)

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.

1
投票

这段代码适合我:

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

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

    MsgBox NumRows
End Sub

0
投票

似乎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了。


0
投票

这可能是显而易见的,但是,通过声明范围并且不包括哪个工作簿或工作表,那么它可能完全在另一个工作表上尝试CountA()。我发现完全解决这些问题可以省去很多麻烦。

© www.soinside.com 2019 - 2024. All rights reserved.