То, что я пытаюсь сделать, это перебрать диапазон, содержащий имена рабочих листов, и если ячейка не пуста, добавьте результат функции CountA
в переменную count.WorksheetFunction.CountA не возвращает правильное значение
Таким образом, переменная count должна быть равна числу непустых ячеек в диапазоне B9:B28
на листах, которые я выполняю, но, как ни странно, это значение равно числу непустых ячеек в диапазоне, который я собираюсь через (sheet1!d5:d24
).
Что я делаю неправильно? Вот код, я использую:
For Each c In Worksheets("Sheet1").Range("d5:d24").Cells
If Not IsEmpty(c) Then
count = count + WorksheetFunction.CountA(c & "!b9:b28")
End If
Next
Я попробовал альтернативный метод перебора второго диапазона и, если клетки не являются пустыми, то приращение переменной на 1, но что это дает несоответствиеВремя работы ошибки 13 типа ошибка. Это то, что я делаю сейчас:
For Each c In Worksheets("Sheet1").Range("d5:d24")
If Not IsEmpty(c) Then
For Each c2 In Worksheets(c).Range("b9:b28")
If Not IsEmpty(c2) Then
'count = count + WorksheetFunction.CountA(c & "!b9:b28")
count = count + 1
End If
Next
End If
Next
Пожалуйста, помогите мне. Большое спасибо заранее всем тем, кто забирает время, чтобы ответить.
Я думаю, вам нужно предоставить '.CountA' с объектом диапазона и не строки. Попробуйте '.CountA (Worksheets (c) .Range (" B9: B28 "))' –
Вы используете ячейку (как объект диапазона) и пытаетесь добавить к ней нотацию адреса. Конечно, это не сработает. Следуйте совету @PeterAlbert. –
Спасибо за быстрые ответы. Я попробовал решение @Peter Albert, но он выбросил ошибку несоответствия типа. Я представил строку, потому что я думал, что функции работают одинаково в VBA, как в Excel. –