По существу, вы можете либо Вычислить формулу, как она появится на листе, либо вы можете адаптировать синтаксис для использования в качестве принятой команды VBA. Вот несколько вариантов каждого из них. Обратите внимание, что я явно включаю ссылку на родительский лист. Это особенно важно для первых двух , чтобы оценить методы и желательно для всех четырех вариантов, чтобы вы не считали столбец A от неправильного рабочего листа.
Dim j As Long
j = [COUNTA(Sheet1!A:A)]
Debug.Print j
j = Evaluate("COUNTA(Sheet1!A:A)")
Debug.Print j
j = Application.CountA(Sheets("Sheet1").Columns(1))
Debug.Print j
j = Application.CountA(Range("Sheet1!A:A"))
Debug.Print j
Первый просто использует [ и ] как обертки вокруг COUNTA
формулы как она будет выглядеть на листе. Это заставляет оценивать формулу к результату. Вторая - это еще одна оценка формулы, но с помощью команды .Evaluate
вы можете построить формулу в виде строки с использованием методов конкатенации, замены и других методов синтаксического анализа. Вы можете указать знак равным знаку (например, =) в качестве префикса, если это имеет для вас больше смысла (например, j = [=COUNTA(Sheet1!A:A)]
), но это необязательно.
В двух последних версиях VBA принимает рабочий лист COUNTA
, предварительно используя его либо Application.Worksheetfunction.
, либо (как указано выше) только Application.
. Диапазон ячеек также перемещается из нотации ячейки листа в нотацию ячейки стиля VBA.
В этой строке кода есть по крайней мере две ошибки (одна в компиляции и одна во время выполнения) –