Как коректно да изведем съобщение на екрана, което ни съобщава броя на клетките в една таблица, като се има предвид, че в таблицата има скрити редове?
Здравейте, за редовете намерих готов и тестван код, но за броя на клетките не успях да намеря, нито пък да съставя синтаксис.
Прилагам кода, който показва точната бройка на редовете в една таблица, независимо от скритите редове.
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 & " активни реда"
Здравейте, Николай, за да изведете съобщение на екрана с броя на клетките в една таблица, без да включвате скритите редове, може да използвате краткия код, който брои клетките във всички редове и после да го коригирате да прескача скритите.
- Отворете Visual Basic за приложения чрез клавишната комбинация Alt + F11.
- В VBA, отидете на Insert > Module, за да създадете нов модул.
- Във Вашия нов модул, поставете следния код:
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
Този код първо дефинира използваните работни лист и диапазон от клетки. След това обхожда всеки ред в диапазона и проверява дали клетката е скрита, ако не е - увеличава брояча.
- Изпълнете макроса, като натиснете 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 празен ред. ...