У меня есть макрос - реагирующий на движение бегунка полосы прокрутки. Двигается бегунок - перетаскиванием мышки, колесиком мышки, обычным движением выделенной ячейки. Лист имеет размер 1000 строк. На тысячной строке - стоит значение 1, поэтому бегунок прокрутки - внешне отображается на область в 1000 строк. Но сейчас макрос реагирует - на вообще любое движение бегунка.
Как заставить макрос реагировать только тогда - когда бегунок находится ровно посередине - между нулевой и тысячной строкой ? (Это примерно пятисотая строка)
У меня есть макрос - реагирующий на движение бегунка полосы прокрутки. Двигается бегунок - перетаскиванием мышки, колесиком мышки, обычным движением выделенной ячейки. Лист имеет размер 1000 строк. На тысячной строке - стоит значение 1, поэтому бегунок прокрутки - внешне отображается на область в 1000 строк. Но сейчас макрос реагирует - на вообще любое движение бегунка.
Как заставить макрос реагировать только тогда - когда бегунок находится ровно посередине - между нулевой и тысячной строкой ? (Это примерно пятисотая строка)DimOzerov
У Вас макрос реагирует не на движение бегунка, а на изменение левой верхней отображаемой ячейки. Можете попробовать не бегунком смещаться, а кнопками - тоже сработает. Можно изменить макрос, чтобы он реагировал на 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", либо не перетаскиванием бегунка, а нажатием на полосу прокрутки ниже него. Тогда сработает. Либо рыть и обрабатывать другое событие...
У Вас макрос реагирует не на движение бегунка, а на изменение левой верхней отображаемой ячейки. Можете попробовать не бегунком смещаться, а кнопками - тоже сработает. Можно изменить макрос, чтобы он реагировал на 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