Как коректно да изведем съобщение на екрана, което ни съобщава броя на клетките в една таблица, като се има предвид, че в таблицата има скрити редове?

VBA за Excel

Здравейте, за редовете намерих готов и тестван код, но за броя на клетките не успях да намеря, нито пък да съставя синтаксис.

Прилагам кода, който показва точната бройка на редовете в една таблица, независимо от скритите редове.

Sub AVisible_Row()

Dim ws As Worksheet Dim rCount As Long, x As Long Dim rng As Range

Set ws = ActiveSheet rCount = 0 For x = 1 To ws.Range("A1").CurrentRegion.Rows.Count If ws.Cells(x, 1).EntireRow.Hidden = False Then rCount = rCount + 1

End If

'col_nu = Range("A1").CurrentRegion.Columns.Count 'cell_nu = Range("A1").CurrentRegion.Cells.Count

Next x msg = "Таблицата се състои от:" MsgBox msg & vbNewLine & rCount & " активни реда"

Здравейте, Николай, за да изведете съобщение на екрана с броя на клетките в една таблица, без да включвате скритите редове, може да използвате краткия код, който брои клетките във всички редове и после да го коригирате да прескача скритите.

  1. Отворете Visual Basic за приложения чрез клавишната комбинация Alt + F11.
  2. В VBA, отидете на Insert > Module, за да създадете нов модул.
  3. Във Вашия нов модул, поставете следния код:
Sub CountVisibleCells()
    Dim ws As Worksheet
    Dim visibleCellCount As Long
    Dim rng As Range
    Dim cell As Range

    Set ws = ActiveSheet
    Set rng = ws.Range("A1").CurrentRegion

    visibleCellCount = 0

    For Each cell In rng
        If Not cell.EntireRow.Hidden Then
            visibleCellCount = visibleCellCount + 1
        End If
    Next cell

    MsgBox "В таблицата има " & visibleCellCount & " видими клетки."
End Sub

Този код първо дефинира използваните работни лист и диапазон от клетки. След това обхожда всеки ред в диапазона и проверява дали клетката е скрита, ако не е - увеличава брояча.

  1. Изпълнете макроса, като натиснете F5 или отидете на Run > Run Sub/UserForm. Този код ще преброи всички видими клетки в обхвата на текущия регион, започващ от клетка A1, и ще покаже крайния резултат чрез съобщение (MsgBox).

Имайте предвид, че този код работи с предположението, че таблицата започва от клетка A1 и използва CurrentRegion, за да определи обхвата на таблицата. Ако Вашата таблица се намира в друг обхват, трябва да коригирате адреса на клетката (например Set rng = ws.Range("B2").CurrentRegion ако таблицата започва от клетка B2).

Здравейте, Аула Модератор!

Благодаря за отговора, кодът работи отлично. Прилагам тествана процедура, която брои точно видимите редове, колони и клетки в една таблица, независимо от скритите редове и извежда съобщение на екрана.

Трябва да се има предвид, че процедурата ще работи, ако таблицата започва от клетка А1.

П.П. Как да представя кода по начина, който сте го представили и как да сменя background цвета в VBA.

Във форума може да форматирате текста с markdown

Три апострофа в markdown задават код (не само в Аула, навсякъде, където се ползва markdown)

Sub CountVisibleCells()
    Dim ws As Worksheet
    Dim visibleCellCount As Long
    Dim rng As Range


    MsgBox "В таблицата има " & visibleCellCount & " видими клетки."
End Sub

Здравей, Иван, благодаря за включването, ето че нещо ново научих. Прилагам отново кода за тест.

...

Sub Visible_Row_Columns_Cells() 'Áðîè âèäèìèòå ðåäîâå, êîëîíè è êëåòêè â åäíà òàáëèöà, êîÿòî çàïî÷âà îò êëåòêà À1!

Dim rCount As Long, x As Long Dim visibleCellCount As Long

Dim ws As Worksheet Dim rng As Range Dim cell As Range

Set ws = ActiveSheet 'Áðîè ðåäîâå rCount = 0

For x = 1 To ws.Range("A1").CurrentRegion.Rows.Count If ws.Cells(x, 1).EntireRow.Hidden = False Then rCount = rCount + 1 '

col_nu = Range("A1").CurrentRegion.Columns.Count 'Áðîè êîëîíè

Set rng = ws.Range("A1").CurrentRegion 'Áðîè êëåòêè

visibleCellCount = 0

For Each cell In rng
    If Not cell.EntireRow.Hidden Then
        visibleCellCount = visibleCellCount + 1
    End If

Next cell

End If '

Next x

msg = "Òàáëèöàòà ñå ñúñòîè îò:" col_nu = col_nu & " âèäèìè êîëîíè;"

MsgBox msg & vbNewLine & rCount & " âèäèìè ðåäà;" _ & vbNewLine & col_nu & vbNewLine & visibleCellCount & " âèäèìè êëåòêè."

End Sub ...

Сега друг казус се появи, относно въведения текст. Забавил съм на какво се дължеше това, но и в not документ е същото. Беше свързано с инсталираните езикови пакети.

...

Нещо не ми се получи. Да не би да е заради последния апостроф. След End Sub съм оставил 1 празен ред. ...


Вашият отговор

Научи компютърните програми онлайн от топ експертите на България
Регистрацията в АУЛА ви дава:
  • 20 безплатни урока
  • Трикове и тънкости за софтуера
  • Отговори на вашите въпроси
  • Регистрация