Страницы: 1
RSS
Количество строк листа на экране монитора
 
Всем, доброй ночи!

Искал ответ на форуме, но так и не нашел. Вопрос: Можно ли программно определить количество отображаемых строк листа на экране монитора?
Строки могут иметь различную высоту, а монитор различное разрешение экрана. Лента может быть свёрнута, а может быть и развёрнута.
 
Код
ActiveWindow.VisibleRange.Rows.Count
По вопросам из тем форума, личку не читаю.
 
БМВ, работает только в том случае, когда не закреплены строки вверху таблицы. Если к примеру закреплены 4 строки, то результат уменьшен на 4, т. е. определяет только незакреплённые строки.
 
Код
ActiveWindow.VisibleRange.Rows.Count +ActiveWindow.ActivePane.VisibleRange.Row-1
только если закрепленные строки со сдвигом , то нужно еще помудрить.
Изменено: БМВ - 17.03.2019 01:15:19
По вопросам из тем форума, личку не читаю.
 
БМВ, потестировал, работает с закреплёнными строками, но вылезла другая проблема. Если скрываю строки, то результат увеличивается на количество скрытых строк. Например, отображается 27, скрыто 10, результат 37.
Изменено: Evgenyy - 17.03.2019 01:32:55
 
Evgenyy,
есть еще у Вас в рукавах козыря?
Код
  Dim RwCnt&
  With ActiveWindow
    RwCnt = .VisibleRange.Columns(1).SpecialCells(12).Count
    If .SplitVertical > 0.01 Then RwCnt = RwCnt + .Panes(1).VisibleRange.Rows.Count
    MsgBox RwCnt
  End With
Изменено: Ігор Гончаренко - 17.03.2019 02:15:10
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Ігор Гончаренко, Благодарю, в принципе всё работает, но есть одна шероховатость. Если самая нижняя строка на экране отображается частично, даже высотой 2 пикселя, то она тоже считается, как видимая. Можно ли как-то подкорректировать код, чтобы считались только полностью видимые строки?
 
можно конечно.
корректируйте как хотите
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Цитата
Evgenyy написал:
но есть одна шероховатость
и не одна. например если в зафиксированной шапке будут крытые строки, то будет сбой и надо уже
Код
    If .FreezePanes Then RwCnt = RwCnt + .Panes(1).VisibleRange.Columns(1).SpecialCells(12).Count
а для идентификации видимости последней строки нужно сравнивать размеры видимой области и координат нижнего края последней видимой строки.
По вопросам из тем форума, личку не читаю.
 
Evgenyy, а можно узнать для чего Вам это знать (вопрос из названия темы)? Какую задачу Вы решаете? Не стёб
Согласие есть продукт при полном непротивлении сторон
 
Sanja, пытаюсь разрешить неразрешимую задачу, а именно - "псевдозакрепить нижнюю часть таблицы" (4 строки с итогами).
Идея заключается в следующем: прикрепляем две неперемещаемых кнопки к таблице, одна вверху окна, другая - внизу. На кнопки вешаем макросы, которые вращают таблицу вверх-вниз и одновременно скрывают-отображают строки перед нижней частью.
 
Код
  Dim RwCnt&
  With ActiveWindow
    RwCnt = .VisibleRange.Columns(1).SpecialCells(12).Count
    If .FreezePanes Then RwCnt = RwCnt + .Panes(1).VisibleRange.Columns(1).SpecialCells(12).Count
    If .ActiveSheet.Rows(.VisibleRange.Rows.Count + ActiveWindow.ActivePane.VisibleRange.Row - 1).Top > _
        .UsableHeight Then RwCnt = RwCnt - 1
    Debug.Print RwCnt
  End With
Изменено: БМВ - 17.03.2019 14:15:30
По вопросам из тем форума, личку не читаю.
 
Цитата
Evgenyy написал:
псевдозакрепить нижнюю часть таблицы
А не проще разделить окно (Вид - Окно - Разделить), чтобы в нижней панели были строки с итогами?
Изменено: Казанский - 17.03.2019 13:42:00
 
Цитата
Казанский написал: в нижней панели были строки с итогами
тогда верхний заголовок становится подвижным :-)
По вопросам из тем форума, личку не читаю.
 
Итоги разместить над таблицей. В закрепленном диапазоне итоги всегда на виду
 
БМВ, потестировал Ваш код, считает все строки, и те которые видны наполовину.

Казанский, пробовал разделять окно - выглядит это убого.
Цитата
БМВ написал: тогда верхний заголовок становится подвижным
Абсолютно согласен!

Что касается верхних строк (шапки таблицы), то они закреплены.

vikttur, такой вариант оформления таблиц я использовал и ранее, но хочется попробовать сделать и другие варианты. Не знаю только, что выльется из этой идеи.
Изменено: Evgenyy - 17.03.2019 14:51:13
 
Не воспроизвести ошибку.

У меня и так и сяк все правильно считает.
Я чуть подправил выше код, но это так, для оптимизации.
Изменено: БМВ - 17.03.2019 14:16:25
По вопросам из тем форума, личку не читаю.
 
БМВ, а у меня вместо 21 полностью видимой строки, определяет 22.
Изменено: Evgenyy - 17.03.2019 14:39:50
 
А не проще Вид-Окно-Новое окно?
Тогда и итоги стоят, и закрепленные области на месте.  :)
 
Лажа прет Попробовал так, тоже то проходит то нет.
Код
    Dim RwCnt&
    With ActiveWindow
    RwCnt = .VisibleRange.Columns(1).SpecialCells(12).Count
    If .FreezePanes Then RwCnt = RwCnt + .Panes(1).VisibleRange.Columns(1).SpecialCells(12).Count
    If .UsableHeight < .VisibleRange.Rows.Height + .Panes(1).VisibleRange.Rows.Height Then RwCnt = RwCnt - 1
    End With
    MsgBox ("Количество отображаемых строк: " & RwCnt)
может макрушники подключатся, я то так.
По вопросам из тем форума, личку не читаю.
Страницы: 1
Наверх