Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.02.2013, 00:44   #1
staniiislav
Форумчанин
 
Аватар для staniiislav
 
Регистрация: 16.04.2010
Сообщений: 695
По умолчанию ScrollBar прокрутка значений по листам

Доброго времени суток уважаемые знатоки!

написал макрос (просьба подсказать если что-то не так сделал):

Код:
Private Sub ScrollBar1_Change()
Dim r&, j&, lRow&
lRow = Sheets("Лист2").Cells(Rows.Count, "A").End(xlUp).Row
Application.ScreenUpdating = False
r = ScrollBar1.Value
Cells(2, 3) = r - 1
Cells(1, 3) = lRow - 1
ScrollBar1.Max = lRow
ScrollBar1.Min = 2
For j = 1 To 10
    Cells(j + 2, 1) = Sheets("Лист2").Cells(r, j)
Next
Application.ScreenUpdating = True
End Sub
вроде все работает нормально если список (данные на лист2 заполнены больше чем две строки), но если удалить данные с 3 по 5 строки (оставить заполненным только заголовок и первою строку данных), то ScrollBar становится не активным, даже если наполнить еще одну или две строки ScrollBar, все равно не активен!!! И активировать его получается только когда запустить макрос ScrollBar вручную... Как эту беду можно исправить?
Спасибо за внимание, пример прикладываю
Вложения
Тип файла: rar ScrollBar1.rar (15.6 Кб, 14 просмотров)
Единственный способ стать умнее, играть с более умным противником...
staniiislav вне форума Ответить с цитированием
Старый 08.02.2013, 08:21   #2
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Истина где-то здесь:

Цитата:
Код:
ScrollBar1.Max = lRow
ScrollBar1.Min = 2
когда у Вас остается 2 строки, то и max и min равны 2 - т.е. изменение скроллбара просто не происходит и ваш метод не вызывается. попробуйте границы скроллбара устанавливать в worksheet_change.
Правильно поставленная задача - три четверти решения.

Последний раз редактировалось DiemonStar; 08.02.2013 в 08:24.
DiemonStar вне форума Ответить с цитированием
Старый 11.02.2013, 10:03   #3
staniiislav
Форумчанин
 
Аватар для staniiislav
 
Регистрация: 16.04.2010
Сообщений: 695
По умолчанию

Цитата:
Сообщение от DiemonStar Посмотреть сообщение
Истина где-то здесь:



когда у Вас остается 2 строки, то и max и min равны 2 - т.е. изменение скроллбара просто не происходит и ваш метод не вызывается. попробуйте границы скроллбара устанавливать в worksheet_change.
спасибо за ответ DiemonStar, но а если диапазон будет изначально пуст полностью, ScrollBar тогда все равно будет не активен.
Единственный способ стать умнее, играть с более умным противником...
staniiislav вне форума Ответить с цитированием
Старый 11.02.2013, 10:16   #4
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Цитата:
Сообщение от staniiislav Посмотреть сообщение
спасибо за ответ DiemonStar, но а если диапазон будет изначально пуст полностью, ScrollBar тогда все равно будет не активен.
Проблема в том, что у вас изменение границ скролла завязано на срабатывание самого скролла. Т.е. если срабатывания скролла не будет, то и границы для скролла не изменятся. Вынесите изменение границ в событие изменения ячеек. Например:
Код:
Private Sub Worksheet_Change(ByVal Target As Range)
  If Not Intersect(Target, [A:A]) Is Nothing Then
    R = Sheets("Лист2").Cells(Rows.Count, "A").End(xlUp).Row
    ScrollBar1.Max = IIf(R < 2, 2, R)
    ScrollBar1.Min = 2
  End If
End Sub
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 11.02.2013, 14:39   #5
staniiislav
Форумчанин
 
Аватар для staniiislav
 
Регистрация: 16.04.2010
Сообщений: 695
По умолчанию

Цитата:
Сообщение от DiemonStar Посмотреть сообщение
Проблема в том, что у вас изменение границ скролла завязано на срабатывание самого скролла. Т.е. если срабатывания скролла не будет, то и границы для скролла не изменятся. Вынесите изменение границ в событие изменения ячеек. Например:
Код:
Private Sub Worksheet_Change(ByVal Target As Range)
  If Not Intersect(Target, [A:A]) Is Nothing Then
    R = Sheets("Лист2").Cells(Rows.Count, "A").End(xlUp).Row
    ScrollBar1.Max = IIf(R < 2, 2, R)
    ScrollBar1.Min = 2
  End If
End Sub
Спасибо DiemonStar буду пробовать!
Единственный способ стать умнее, играть с более умным противником...
staniiislav вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
макрос по листам KApSuL Microsoft Office Excel 4 07.11.2012 13:29
Выполнить по нескрытым листам MaxxVer Microsoft Office Excel 4 25.09.2012 15:14
Поиск по листам ogololobov2009 Microsoft Office Excel 2 20.05.2011 18:27
Переход по листам lavrentiyy Microsoft Office Excel 7 29.09.2010 22:56
Цикл по листам и ячейкам motorway Microsoft Office Excel 1 03.07.2009 11:05