2014-09-17 4 views
5

Следующий фрагмент кода работает в Excel до 2010:Excel VBA WorksheetFunction.CountA - не работает обновление пост в Office 2010

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

Есть 38 ячейки, содержащие текст/значения в столбце A. Если код запускается в Excel 2007, NumRows правильно оценивает до 38, однако он (ошибочно) оценивается до 65 536 в Excel 2010.

Ввод функции ввода в ячейку CountA ОК в обеих версиях.

Похожие нити question 16696891, но не было никакого ответа, и предложения были, я думаю, красные селедки ...

Любые идеи?

ответ

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 
6

Я не уверен, что именно ваша проблема, потому что я не могу получить код для работы, как написано. Две вещи кажутся очевидными:

  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) 

удачи.

+0

Hi Спасибо оба. Извините, должно было быть ясно - диапазон задается с помощью ключевого слова Set. На самом деле вам не нужен '.WorksheetFunction', на самом деле' Application.CountA' должен работать сам по себе. На рассматриваемом ПК 'Application.WorksheetFunction.CountA (Range (« A: A »)) показывает 65536, хотя только 38 ячеек содержат что-либо. Я не могу воспроизвести на своем столе. Я думал, что это может быть какая-то проблема с обновлением от одной версии офиса до другой. «Новый» ПК имеет Office 2010 в Windows 7 и был обновлен с Office 2007 в Windows 2003. –

+0

Это может быть проблема с конкретной электронной таблицей. Попробуйте выбрать все «пустые» ячейки, удалить их и сохранить. Если это не приведет к ожидаемому результату «38», я в тупике. –

0

Кажется, есть изменения в том, как Application.COUNTA работает в VB7 vs VB6. Я попробовал следующее в обеих версиях VB.

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

В VB6 это возвращает 0.

Inn VB7 он возвращает 32

Похоже VB7 не считает COUNTA быть COUNTA больше.

2

Этот ответ другого форума решил проблему.

(заменить свой собственный диапазон для "I:" показанный здесь)

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. 
0

Это может быть очевидным, но, то указав диапазон и не включая какая рабочая книга или рабочий лист, то она может пытаться CountA() на другом листе целиком. Я нахожу, что для полного решения этих проблем сохраняется много головных болей.

Смежные вопросы