2014-09-17 7 views
5

Das folgende Stück Code in Excel arbeitet vor 2010:Excel VBA WorksheetFunction.CountA - nicht funktioniert Post Upgrade auf Office 2010

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

gibt es 38 Zellen text/Werte in Spalte A enthält, wenn der Code wird in Excel 2007 ausgeführt, NumRows wird korrekt zu 38 ausgewertet, wird jedoch in Excel 2010 zu 65.536 (falsch) ausgewertet.

Das Eingeben der CountA-Funktion in Zelle funktioniert in beiden Versionen OK.

Ähnliche Faden ist question 16696891, aber es gab keine Antwort, und die Vorschläge wurden, glaube ich, rote Heringe ...

Irgendwelche Ideen?

Antwort

1

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 
6

Ich bin nicht sicher genau das, was dein Problem ist, weil ich nicht den Code bekommen kann als geschrieben zu arbeiten. Zwei Dinge scheinen offensichtlich:

  1. Es scheint, Sie verlassen sich auf VBA, um variable Typen zu bestimmen und entsprechend zu ändern. Dies kann verwirrend sein, wenn Sie nicht vorsichtig sind, weil VBA einen Variablentyp zuweisen kann, den Sie nicht beabsichtigt haben. In Ihrem Code sollte ein Typ RangemyRange zugewiesen werden. Da ein Range Typ ein Objekt in VBA ist es braucht Set zu sein, wie folgt aus: Set myRange = Range("A:A")
  2. Ihre Nutzung der Tabellenfunktion CountA() soll mit .WorksheetFunction

aufgerufen werden, wenn Sie es nicht bereits, sollten Sie tun, verwenden die Option Explicit am oberen Rand Ihres Moduls und geben Sie Ihre Variablen mit Dim Anweisungen ein, wie ich unten getan habe.

Der folgende Code funktioniert bei mir im Jahr 2010. Hoffentlich ist es für Sie auch:

Dim myRange As Range 
Dim NumRows As Integer 

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

Good Luck.

+0

Hallo Danke beides. Entschuldigung, sollte klargestellt haben - der Bereich wird mit dem Schlüsselwort Set festgelegt. Eigentlich brauchen Sie nicht '.WorksheetFunction', eigentlich sollte' Application.CountA' alleine funktionieren. Auf dem betreffenden PC zeigt 'Application.WorksheetFunction.CountA (Range (" A: A ")) 65.536, obwohl nur 38 Zellen etwas enthalten. Ich kann nicht auf meinem eigenen Schreibtisch replizieren. Ich dachte, es könnte ein Problem mit dem Upgrade von einer Office-Version zur anderen sein. Der "neue" PC verfügt über Office 2010 unter Windows 7 und wurde von Office 2007 unter Windows 2003 aktualisiert. –

+0

Könnte es ein Problem mit der bestimmten Tabelle sein? Versuchen Sie, alle "leeren" Zellen auszuwählen, zu löschen und zu speichern. Wenn das nicht zu dem erwarteten "38" Ergebnis führt, bin ich ratlos. –

0

Es scheint, es gibt eine Änderung, wie Application.COUNTA in VB7 vs VB6 funktioniert. Ich habe das folgende in beiden Versionen von VB versucht.

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

In VB6 dieser Wert 0 zurück

Inn VB7 es 32 gibt

wie VB7 Sieht nicht COUNTA nicht als COUNTA mehr sein.

2

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

(Ersetzen Sie Ihren eigenen Bereich für die "I: I" hier zu sehen)

Re: COUNTA funktioniert 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. 
0

Es mag offensichtlich sein, aber durch den Bereich unter Angabe und ohne In dieser Arbeitsmappe oder Arbeitsblatt versucht es möglicherweise CountA() auf einem anderen Blatt vollständig. Ich finde, diese Dinge zu speichern, spart eine Menge Kopfschmerzen.

Verwandte Themen