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

Вход

Регистрация

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

 

= Мир MS Excel/Как отследить событие Scroll в VBA? - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Как отследить событие Scroll в VBA?
Jhonson Дата: Пятница, 23.03.2012, 13:08 | Сообщение № 1
Группа: Друзья
Ранг: Ветеран
Сообщений: 514
Репутация: 169 ±
Замечаний: 0% ±

Написал макрос, который отслеживает скроллинг листа:
[vba]
Code
Sub Auto_Open()
Do While True
     With ActiveSheet.Shapes(1).Fill.ForeColor
         If ActiveWindow.ScrollRow = 2 Then
             If .SchemeColor <> 9 Then .SchemeColor = 9
         Else
             If .SchemeColor <> 50 Then .SchemeColor = 50
         End If
         DoEvents
     End With
Loop
End Sub
[/vba]
Недостаток данного метода в том, что макрос постоянно выполняется.
Возможно ли подобное реализовать через обработку событий, без использования DoEvents
В проложении пример работы макроса!
Заранее СПАСИБО за ответы!
К сообщению приложен файл: Scroll_.xls (59.5 Kb)


"Ничто не приносит людям столько неприятностей, как разум."
 
Ответить
СообщениеНаписал макрос, который отслеживает скроллинг листа:
[vba]
Code
Sub Auto_Open()
Do While True
     With ActiveSheet.Shapes(1).Fill.ForeColor
         If ActiveWindow.ScrollRow = 2 Then
             If .SchemeColor <> 9 Then .SchemeColor = 9
         Else
             If .SchemeColor <> 50 Then .SchemeColor = 50
         End If
         DoEvents
     End With
Loop
End Sub
[/vba]
Недостаток данного метода в том, что макрос постоянно выполняется.
Возможно ли подобное реализовать через обработку событий, без использования DoEvents
В проложении пример работы макроса!
Заранее СПАСИБО за ответы!

Автор - Jhonson
Дата добавления - 23.03.2012 в 13:08
nerv Дата: Воскресенье, 25.03.2012, 13:10 | Сообщение № 2
Группа: Редакторы
Ранг: Обитатель
Сообщений: 431
Репутация: 193 ±
Замечаний: 0% ±

Jhonson, а что надо то? Могу предположить - сделать активной кнопку вверх, если "страница" прокручена более чем на 1 экран вниз. Оно?


Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


YM 41001156540584 / WM WMR R21924176233

https://github.com/nervgh/vba
 
Ответить
Сообщение Jhonson, а что надо то? Могу предположить - сделать активной кнопку вверх, если "страница" прокручена более чем на 1 экран вниз. Оно?

Автор - nerv
Дата добавления - 25.03.2012 в 13:10
Jhonson Дата: Воскресенье, 25.03.2012, 21:31 | Сообщение № 3
Группа: Друзья
Ранг: Ветеран
Сообщений: 514
Репутация: 169 ±
Замечаний: 0% ±

В книге скрыты номера строк и столбцов, листов в книге больше 20, на каждом листе однотипные таблицы но с разным количеством строк.
Нужно чтобы пользователь видел, что часть строк скрыта, даже если скрыта одна строка.
На данный момент (DoEvents и цикл не использую), повесил эту проверку на события :
[vba]
Code
Workbook_SheetActivate
Worksheet_SelectionChange
[/vba]
Но все равно если человек просто прокручивает колесиком мышки таблицу событие не возникает(((
Думаю, что это можно решить с помощью API, но пока нужных не нашел.
К сообщению приложен файл: Scroll-3-.xls (57.5 Kb)


"Ничто не приносит людям столько неприятностей, как разум."

Сообщение отредактировал Jhonson - Воскресенье, 25.03.2012, 21:32
 
Ответить
СообщениеВ книге скрыты номера строк и столбцов, листов в книге больше 20, на каждом листе однотипные таблицы но с разным количеством строк.
Нужно чтобы пользователь видел, что часть строк скрыта, даже если скрыта одна строка.
На данный момент (DoEvents и цикл не использую), повесил эту проверку на события :
[vba]
Code
Workbook_SheetActivate
Worksheet_SelectionChange
[/vba]
Но все равно если человек просто прокручивает колесиком мышки таблицу событие не возникает(((
Думаю, что это можно решить с помощью API, но пока нужных не нашел.

Автор - Jhonson
Дата добавления - 25.03.2012 в 21:31
nerv Дата: Понедельник, 26.03.2012, 10:10 | Сообщение № 4
Группа: Редакторы
Ранг: Обитатель
Сообщений: 431
Репутация: 193 ±
Замечаний: 0% ±

Jhonson, что-то я Вас не понимаю smile Нужно отследить видимость строк, а Вы чем-то другим занимаетесь.
По видимости могу предложить разбирать эту строку
[vba]
Code
ActiveSheet.Rows.SpecialCells(xlCellTypeVisible).Address
[/vba]


Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


YM 41001156540584 / WM WMR R21924176233

https://github.com/nervgh/vba
 
Ответить
СообщениеJhonson, что-то я Вас не понимаю smile Нужно отследить видимость строк, а Вы чем-то другим занимаетесь.
По видимости могу предложить разбирать эту строку
[vba]
Code
ActiveSheet.Rows.SpecialCells(xlCellTypeVisible).Address
[/vba]

Автор - nerv
Дата добавления - 26.03.2012 в 10:10
Jhonson Дата: Понедельник, 26.03.2012, 12:56 | Сообщение № 5
Группа: Друзья
Ранг: Ветеран
Сообщений: 514
Репутация: 169 ±
Замечаний: 0% ±

nerv, да мы явно друг друга не понимаем smile . Написав то, что строки скрыты я не имел ввиду (извините если ввел в заблуждение), что к таблице применен автофильтр или к строке применено свойство .hidden, я про то что при скроллинге (когда пользователь прокручивает колесико мышки или двигает полосу прокрутки) часть верхних строк становится не видна. Зеленая стрелочка нужна для визуализации (индикации) того, что вверху есть строки, которых в данный момент не видно.
В приложенных мной файлах все работает так как надо, есть только одна проблема, когда макрос постоянно выполняется часть функций эксель не доступна, да и ИМХО это не совсем правильно, когда постоянно выполняется зацикленная процедура.


"Ничто не приносит людям столько неприятностей, как разум."
 
Ответить
Сообщениеnerv, да мы явно друг друга не понимаем smile . Написав то, что строки скрыты я не имел ввиду (извините если ввел в заблуждение), что к таблице применен автофильтр или к строке применено свойство .hidden, я про то что при скроллинге (когда пользователь прокручивает колесико мышки или двигает полосу прокрутки) часть верхних строк становится не видна. Зеленая стрелочка нужна для визуализации (индикации) того, что вверху есть строки, которых в данный момент не видно.
В приложенных мной файлах все работает так как надо, есть только одна проблема, когда макрос постоянно выполняется часть функций эксель не доступна, да и ИМХО это не совсем правильно, когда постоянно выполняется зацикленная процедура.

Автор - Jhonson
Дата добавления - 26.03.2012 в 12:56
nerv Дата: Вторник, 27.03.2012, 00:49 | Сообщение № 6
Группа: Редакторы
Ранг: Обитатель
Сообщений: 431
Репутация: 193 ±
Замечаний: 0% ±

Jhonson, отследить прокрутку мышью вряд ли получится (без API). Такого события, насколько мне известно, нет. Да и API не советую подключать, не тот случай, как мне кажется. Зачем скрывать номера строк и столбцов? Ведь они служат как раз для того, чтобы пользователь мог ориентироваться на листе.

Еще по коду. Не совсем понял, зачем это
[vba]
Code
Do While Cells(1, 1) <> ""
       ' loop body
Loop
[/vba]
Если нужен бесконечный цикл, то можно писать так
[vba]
Code
Do While True
       ' loop body
Loop

' или так
Do While 1
       ' loop body
Loop

' или While ... Wend
While True
       ' loop body
Wend

' или, что правильней спец. конструкция
Do
       ' loop body
Loop
[/vba]
Кстати, свойство/метод объекта к которому обращаетесь, рекомендую указывать всегда. Т.е. вместо
[vba]
Code
Cells(1, 1) <> ""
' это
Cells(1, 1).Value <> ""
[/vba]
Встречный вопрос: уверены, что эта конструкция всегда будет давать нужный Вам результат?
[vba]
Code
If ActiveWindow.ScrollRow = 2 Then
[/vba]


Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


YM 41001156540584 / WM WMR R21924176233

https://github.com/nervgh/vba


Сообщение отредактировал nerv - Вторник, 27.03.2012, 00:53
 
Ответить
СообщениеJhonson, отследить прокрутку мышью вряд ли получится (без API). Такого события, насколько мне известно, нет. Да и API не советую подключать, не тот случай, как мне кажется. Зачем скрывать номера строк и столбцов? Ведь они служат как раз для того, чтобы пользователь мог ориентироваться на листе.

Еще по коду. Не совсем понял, зачем это
[vba]
Code
Do While Cells(1, 1) <> ""
       ' loop body
Loop
[/vba]
Если нужен бесконечный цикл, то можно писать так
[vba]
Code
Do While True
       ' loop body
Loop

' или так
Do While 1
       ' loop body
Loop

' или While ... Wend
While True
       ' loop body
Wend

' или, что правильней спец. конструкция
Do
       ' loop body
Loop
[/vba]
Кстати, свойство/метод объекта к которому обращаетесь, рекомендую указывать всегда. Т.е. вместо
[vba]
Code
Cells(1, 1) <> ""
' это
Cells(1, 1).Value <> ""
[/vba]
Встречный вопрос: уверены, что эта конструкция всегда будет давать нужный Вам результат?
[vba]
Code
If ActiveWindow.ScrollRow = 2 Then
[/vba]

Автор - nerv
Дата добавления - 27.03.2012 в 00:49
Jhonson Дата: Вторник, 27.03.2012, 09:02 | Сообщение № 7
Группа: Друзья
Ранг: Ветеран
Сообщений: 514
Репутация: 169 ±
Замечаний: 0% ±

nerv, это Cells(1, 1) <> "" я написал в процессе написания макроса, убирая значение в ячейке A1 я останавливал макрос, в файле не исправил (просто забыл wacko ) в самом первом сообщении уже написал:
Quote (nerv)

Do While True
' loop body
Loop

Quote (nerv)
Встречный вопрос: уверены, что эта конструкция всегда будет давать нужный Вам результат?
If ActiveWindow.ScrollRow = 2 Then
Это будет давать верный результат если область закреплена именно так как у меня в файле, т.е закреплена 1 строка.
Quote (nerv)
Jhonson, отследить прокрутку мышью вряд ли получится (без API). Такого события, насколько мне известно, нет. Да и API не советую подключать, не тот случай, как мне кажется.
А все таки, не подскажете какую именно API использовать? Спать спокойно не могу biggrin !
Да, вот еще вопрос, в Excel есть "Редактор сценариев" возможно ли через него внедрить в документ код на JavaScript, т.к. в нем имеется возможность отследить событие Scroll?


"Ничто не приносит людям столько неприятностей, как разум."

Сообщение отредактировал Jhonson - Вторник, 27.03.2012, 10:30
 
Ответить
Сообщениеnerv, это Cells(1, 1) <> "" я написал в процессе написания макроса, убирая значение в ячейке A1 я останавливал макрос, в файле не исправил (просто забыл wacko ) в самом первом сообщении уже написал:
Quote (nerv)

Do While True
' loop body
Loop

Quote (nerv)
Встречный вопрос: уверены, что эта конструкция всегда будет давать нужный Вам результат?
If ActiveWindow.ScrollRow = 2 Then
Это будет давать верный результат если область закреплена именно так как у меня в файле, т.е закреплена 1 строка.
Quote (nerv)
Jhonson, отследить прокрутку мышью вряд ли получится (без API). Такого события, насколько мне известно, нет. Да и API не советую подключать, не тот случай, как мне кажется.
А все таки, не подскажете какую именно API использовать? Спать спокойно не могу biggrin !
Да, вот еще вопрос, в Excel есть "Редактор сценариев" возможно ли через него внедрить в документ код на JavaScript, т.к. в нем имеется возможность отследить событие Scroll?

Автор - Jhonson
Дата добавления - 27.03.2012 в 09:02
nerv Дата: Вторник, 27.03.2012, 10:35 | Сообщение № 8
Группа: Редакторы
Ранг: Обитатель
Сообщений: 431
Репутация: 193 ±
Замечаний: 0% ±

Quote (Jhonson)
Да, вот еще вопрос, в Excel есть "Редактор сценариев" возможно ли через него внедрить в документ код на JavaScript, т.к. в нем имеется возможность отследить событие Scroll?

Jhonson, предлагаю этот вопрос задать здесь Интересные вопросы по VBA.

Кстати, Вы знаете js?)

Событие есть не в js, а в той среде где работает js - браузер smile


Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


YM 41001156540584 / WM WMR R21924176233

https://github.com/nervgh/vba
 
Ответить
Сообщение
Quote (Jhonson)
Да, вот еще вопрос, в Excel есть "Редактор сценариев" возможно ли через него внедрить в документ код на JavaScript, т.к. в нем имеется возможность отследить событие Scroll?

Jhonson, предлагаю этот вопрос задать здесь Интересные вопросы по VBA.

Кстати, Вы знаете js?)

Событие есть не в js, а в той среде где работает js - браузер smile

Автор - nerv
Дата добавления - 27.03.2012 в 10:35
Jhonson Дата: Среда, 28.03.2012, 18:44 | Сообщение № 9
Группа: Друзья
Ранг: Ветеран
Сообщений: 514
Репутация: 169 ±
Замечаний: 0% ±

Quote (nerv)
Событие есть не в js, а в той среде где работает js - браузер
Я не говорил, что событие в JS wacko я написал, что в JS есть возможность отследить событие Scroll.
Quote (nerv)
Событие есть не в js, а в той среде где работает js - браузер
Совершенно согласен, если мы используем его для WEB, но ведь, как я понимаю, в данном случае среда, где работает JS - Excel?
Quote (nerv)
Кстати, Вы знаете js?)
Ну, так слышал немного biggrin , есть небольшой опыт работы с HTML, CSS, PHP...
Quote (nerv)
Jhonson, предлагаю этот вопрос задать здесь Интересные вопросы по VBA.
Да, наверное так и поступлю, но вероятно простого решения данного вопроса не найти sad ...
"так что пусть в этой песне все остается как было..." Юрий Клинских


"Ничто не приносит людям столько неприятностей, как разум."
 
Ответить
Сообщение
Quote (nerv)
Событие есть не в js, а в той среде где работает js - браузер
Я не говорил, что событие в JS wacko я написал, что в JS есть возможность отследить событие Scroll.
Quote (nerv)
Событие есть не в js, а в той среде где работает js - браузер
Совершенно согласен, если мы используем его для WEB, но ведь, как я понимаю, в данном случае среда, где работает JS - Excel?
Quote (nerv)
Кстати, Вы знаете js?)
Ну, так слышал немного biggrin , есть небольшой опыт работы с HTML, CSS, PHP...
Quote (nerv)
Jhonson, предлагаю этот вопрос задать здесь Интересные вопросы по VBA.
Да, наверное так и поступлю, но вероятно простого решения данного вопроса не найти sad ...
"так что пусть в этой песне все остается как было..." Юрий Клинских

Автор - Jhonson
Дата добавления - 28.03.2012 в 18:44
  • Страница 1 из 1
  • 1
Поиск:

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