Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Макрос реагирует на определенное расположение бегунка - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
Страница 1 из 11
Модератор форума: _Boroda_, Pelena, Manyasha, SLAVICK 
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Макрос реагирует на определенное расположение бегунка (Макросы/Sub)
Макрос реагирует на определенное расположение бегунка
DimOzerov Дата: Среда, 09.08.2017, 10:49 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 21
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Доброе утро, господа программисты.
Помогите разобраться.

У меня есть макрос - реагирующий на движение бегунка полосы прокрутки.
Двигается бегунок - перетаскиванием мышки, колесиком мышки, обычным движением выделенной ячейки.
Лист имеет размер 1000 строк. На тысячной строке - стоит значение 1, поэтому бегунок прокрутки - внешне отображается на область в 1000 строк.
Но сейчас макрос реагирует - на вообще любое движение бегунка.

Как заставить макрос реагировать только тогда - когда бегунок находится ровно посередине - между нулевой и тысячной строкой ?
(Это примерно пятисотая строка)
К сообщению приложен файл: 768505549.xls(32Kb)
 
Ответить
СообщениеДоброе утро, господа программисты.
Помогите разобраться.

У меня есть макрос - реагирующий на движение бегунка полосы прокрутки.
Двигается бегунок - перетаскиванием мышки, колесиком мышки, обычным движением выделенной ячейки.
Лист имеет размер 1000 строк. На тысячной строке - стоит значение 1, поэтому бегунок прокрутки - внешне отображается на область в 1000 строк.
Но сейчас макрос реагирует - на вообще любое движение бегунка.

Как заставить макрос реагировать только тогда - когда бегунок находится ровно посередине - между нулевой и тысячной строкой ?
(Это примерно пятисотая строка)

Автор - DimOzerov
Дата добавления - 09.08.2017 в 10:49
Perfect2You Дата: Среда, 09.08.2017, 16:59 | Сообщение № 2
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 234
Репутация: 59 ±
Замечаний: 0% ±

Excel 2010
У Вас макрос реагирует не на движение бегунка, а на изменение левой верхней отображаемой ячейки. Можете попробовать не бегунком смещаться, а кнопками - тоже сработает.
Можно изменить макрос, чтобы он реагировал на 500 строку только если она будет самой верхней. Или если она будет видимой.

Я подправил, чтобы реагировал, когда 500-ая строка видима (независимо от ее положения на экране):
[vba]
Код
Private Sub Workbook_Open()
  fTimerOn = True
  r1 = ActiveWindow.VisibleRange.Cells(1, 1).Address
  Do While fTimerOn
    DoEvents
    If (Not Intersect(ActiveWorkbook.ActiveSheet.Rows("500"), ActiveWindow.VisibleRange) Is Nothing) And _
            (r1 <> ActiveWindow.VisibleRange.Cells(1, 1).Address) Then
      MsgBox "гав!"
    End If
    r1 = ActiveWindow.VisibleRange.Cells(1, 1).Address
  Loop
End Sub
[/vba]

Но... Пока Вы "тащите" мышкой бегунок - действие пользователя считается незавершенным и макрос благодаря DoEvents стоит!!! Так что чтобы он сработал, нужно смещаться либо нажатием "Page Down", либо не перетаскиванием бегунка, а нажатием на полосу прокрутки ниже него. Тогда сработает.
Либо рыть и обрабатывать другое событие...
К сообщению приложен файл: _768505549.xls(38Kb)


Сообщение отредактировал Perfect2You - Среда, 09.08.2017, 17:00
 
Ответить
СообщениеУ Вас макрос реагирует не на движение бегунка, а на изменение левой верхней отображаемой ячейки. Можете попробовать не бегунком смещаться, а кнопками - тоже сработает.
Можно изменить макрос, чтобы он реагировал на 500 строку только если она будет самой верхней. Или если она будет видимой.

Я подправил, чтобы реагировал, когда 500-ая строка видима (независимо от ее положения на экране):
[vba]
Код
Private Sub Workbook_Open()
  fTimerOn = True
  r1 = ActiveWindow.VisibleRange.Cells(1, 1).Address
  Do While fTimerOn
    DoEvents
    If (Not Intersect(ActiveWorkbook.ActiveSheet.Rows("500"), ActiveWindow.VisibleRange) Is Nothing) And _
            (r1 <> ActiveWindow.VisibleRange.Cells(1, 1).Address) Then
      MsgBox "гав!"
    End If
    r1 = ActiveWindow.VisibleRange.Cells(1, 1).Address
  Loop
End Sub
[/vba]

Но... Пока Вы "тащите" мышкой бегунок - действие пользователя считается незавершенным и макрос благодаря DoEvents стоит!!! Так что чтобы он сработал, нужно смещаться либо нажатием "Page Down", либо не перетаскиванием бегунка, а нажатием на полосу прокрутки ниже него. Тогда сработает.
Либо рыть и обрабатывать другое событие...

Автор - Perfect2You
Дата добавления - 09.08.2017 в 16:59
DimOzerov Дата: Среда, 09.08.2017, 22:57 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 21
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Perfect2You, вроде работает.
Большое спасибо за ответ.
 
Ответить
СообщениеPerfect2You, вроде работает.
Большое спасибо за ответ.

Автор - DimOzerov
Дата добавления - 09.08.2017 в 22:57
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Макрос реагирует на определенное расположение бегунка (Макросы/Sub)
Страница 1 из 11
Поиск:

Яндекс цитирования
© 2010-2017 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!