2014-09-17 12 views
5

Poniższy kawałek kodu działa w Excelu przed 2010:Excel VBA WorksheetFunction.CountA - nie działa poczta uaktualnienia do Office 2010

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

Istnieje 38 komórek zawierających tekst/wartości w kolumnie A. Gdy kod jest uruchamiany w programie Excel 2007, NumRows poprawnie ocenia do 38, jednak (błędnie) ocenia do 65 536 w programie Excel 2010.

Wprowadzanie funkcji w komórce CountA działa poprawnie w obu wersjach.

Podobny wątek jest question 16696891, ale nie było odpowiedzi i sugestii, myślę, czerwone śledzie ...

Jakieś pomysły?

Odpowiedz

1

Ten kod działa dla mnie:

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

nie jestem pewien dokładnie, jaki jest twój problem, bo nie mogę dostać się do pracy jako kod napisany. Dwie rzeczy wydają się oczywiste:

  1. Wygląda na to, że polegasz na VBA, aby określić typy zmiennych i odpowiednio je zmodyfikować. Może to być mylące, jeśli nie jesteś ostrożny, ponieważ VBA może przypisać typ zmiennej, który nie był zamierzony. W swoim kodzie typ Range powinien zostać przypisany do myRange. Ponieważ typ Range jest obiekt w VBA musi być Set, tak: Set myRange = Range("A:A")
  2. Korzystanie z funkcji arkusza CountA() powinno nazywać się .WorksheetFunction

Jeśli nie robi to już, należy rozważyć użycie Opcja Option Explicit u góry modułu i wpisywanie zmiennych za pomocą instrukcji Dim, tak jak to zrobiłem poniżej.

Poniższy kod działa dla mnie w roku 2010. Mam nadzieję, że to działa dla Ciebie:

Dim myRange As Range 
Dim NumRows As Integer 

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

powodzenia.

+0

Witam Dzięki temu. Przepraszamy, powinno to być jasne - zakres jest ustawiany za pomocą słowa kluczowego Ustaw. W rzeczywistości nie potrzebujesz '.WorksheetFunction', w rzeczywistości' Application.CountA' powinno działać samodzielnie. Na komputerze, o którym mowa, 'Application.WorksheetFunction.CountA (Range (" A: A "))' pokazuje 65 536, mimo że tylko 38 komórek zawiera cokolwiek. Nie mogę replikować na własnym biurku. Pomyślałem, że to może być jakiś problem z aktualizacją z jednej wersji biura na drugą. "Nowy" komputer ma Office 2010 na Windows 7 i został uaktualniony z Office 2007 na Windows 2003. –

+0

Czy może to być problem z konkretnym arkuszem kalkulacyjnym. Spróbuj wybrać wszystkie "puste" komórki, usuwając je i zapisując. Jeśli to nie spowoduje oczekiwanego wyniku "38", jestem zaskoczony. –

0

Wygląda na to, że w aplikacji VB7 i VB6 występuje zmiana Application.COUNTA. Próbowałem następujące w obu wersjach VB.

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

W VB6 to zwraca 0.

Inn VB7 powraca 32

Wygląda VB7 nie uważa COUNTA być COUNTA więcej.

2

Ta odpowiedź z innego forum rozwiązała problem.

(podstawić własny zakres dla "I: I" pokazanego tutaj)

Re: COUNTA nie działa w 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

Może to być oczywiste, ale, stwierdzając zakresie i nie obejmuje w skoroszycie lub arkuszu kalkulacyjnym, może to być całkowicie próbowanie CountA() na innym arkuszu. Znajduję się, aby w pełni rozwiązać te problemy, oszczędzając wiele bólów głowy.

Powiązane problemy