it-swarm.com.de

Excel VBA WorksheetFunction.CountA - funktioniert nach dem Upgrade auf Office 2010 nicht

Der folgende Code funktioniert in Excel vor 2010:

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

Es gibt 38 Zellen, die in Spalte A Text/Werte enthalten. Wenn der Code in Excel 2007 ausgeführt wird, wird NumRows korrekt mit 38 ausgewertet, in Excel 2010 jedoch (falsch) mit 65.536.

Die Eingabe der Funktion CountA in-cell funktioniert in beiden Versionen in Ordnung.

Ein ähnlicher Thread ist Frage 16696891 , aber es gab keine Antwort und die Vorschläge waren, glaube ich, rote Heringe ...

Irgendwelche Ideen?

7
Richard Ell

Ich bin mir nicht sicher, was genau Ihr Problem ist, weil ich nicht bekomme, dass Ihr Code wie geschrieben funktioniert. Zwei Dinge scheinen offensichtlich zu sein:

  1. Es scheint, dass Sie sich auf VBA verlassen, um Variablentypen zu ermitteln und entsprechend zu ändern. Dies kann verwirrend sein, wenn Sie nicht vorsichtig sind, da VBA einen Variablentyp zuweisen kann, den Sie nicht beabsichtigt haben. In Ihrem Code sollte Range ein Typ von myRange zugewiesen werden. Da ein Range-Typ ein Objekt in VBA ist, muss es Set sein, wie folgt: Set myRange = Range("A:A")
  2. Ihre Verwendung der Arbeitsblattfunktion CountA() sollte mit .WorksheetFunction aufgerufen werden.

Wenn Sie dies noch nicht tun, sollten Sie die Option Option Explicit oben in Ihrem Modul in Betracht ziehen und Ihre Variablen wie unten beschrieben mit Dim-Anweisungen eingeben.

Der folgende Code funktioniert für mich im Jahr 2010. Hoffentlich funktioniert er auch für Sie:

Dim myRange As Range
Dim NumRows As Integer

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

Viel Glück.

8

Diese Antwort aus einem anderen Forum löste das Problem.

(Ersetzen Sie Ihr eigenes Sortiment durch das hier gezeigte "I: I")

Re: CountA arbeitet nicht in 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.
3
Justin

Dieser Code funktioniert für mich:

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

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

    MsgBox NumRows
End Sub
1
CallumDA

Es scheint, dass sich die Funktionsweise von Application.COUNTA in VB7 gegenüber VB6 geändert hat. Ich habe folgendes in beiden Versionen von VB ausprobiert.

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

In VB6 gibt dies 0 zurück.

Inn VB7 gibt es 32 zurück

Sieht aus, als würde die VB7 COUNTA nicht mehr als COUNTA ansehen.

0

Es kann offensichtlich sein, aber wenn Sie den Bereich angeben und nicht angeben, welche Arbeitsmappe oder welches Arbeitsblatt verwendet werden soll, versucht CountA () auf einem anderen Blatt vollständig zu suchen. Ich denke, diese Dinge zu lösen, spart eine Menge Kopfschmerzen. 

0
perfo