Написал макрос, который отслеживает скроллинг листа: [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 В проложении пример работы макроса! Заранее СПАСИБО за ответы!
Написал макрос, который отслеживает скроллинг листа: [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
В книге скрыты номера строк и столбцов, листов в книге больше 20, на каждом листе однотипные таблицы но с разным количеством строк. Нужно чтобы пользователь видел, что часть строк скрыта, даже если скрыта одна строка. На данный момент (DoEvents и цикл не использую), повесил эту проверку на события : [vba]
Code
Workbook_SheetActivate Worksheet_SelectionChange
[/vba] Но все равно если человек просто прокручивает колесиком мышки таблицу событие не возникает((( Думаю, что это можно решить с помощью API, но пока нужных не нашел.
В книге скрыты номера строк и столбцов, листов в книге больше 20, на каждом листе однотипные таблицы но с разным количеством строк. Нужно чтобы пользователь видел, что часть строк скрыта, даже если скрыта одна строка. На данный момент (DoEvents и цикл не использую), повесил эту проверку на события : [vba]
Code
Workbook_SheetActivate Worksheet_SelectionChange
[/vba] Но все равно если человек просто прокручивает колесиком мышки таблицу событие не возникает((( Думаю, что это можно решить с помощью API, но пока нужных не нашел.Jhonson
Jhonson, что-то я Вас не понимаю Нужно отследить видимость строк, а Вы чем-то другим занимаетесь. По видимости могу предложить разбирать эту строку [vba]
Jhonson, что-то я Вас не понимаю Нужно отследить видимость строк, а Вы чем-то другим занимаетесь. По видимости могу предложить разбирать эту строку [vba]
nerv, да мы явно друг друга не понимаем . Написав то, что строки скрыты я не имел ввиду (извините если ввел в заблуждение), что к таблице применен автофильтр или к строке применено свойство .hidden, я про то что при скроллинге (когда пользователь прокручивает колесико мышки или двигает полосу прокрутки) часть верхних строк становится не видна. Зеленая стрелочка нужна для визуализации (индикации) того, что вверху есть строки, которых в данный момент не видно. В приложенных мной файлах все работает так как надо, есть только одна проблема, когда макрос постоянно выполняется часть функций эксель не доступна, да и ИМХО это не совсем правильно, когда постоянно выполняется зацикленная процедура.
nerv, да мы явно друг друга не понимаем . Написав то, что строки скрыты я не имел ввиду (извините если ввел в заблуждение), что к таблице применен автофильтр или к строке применено свойство .hidden, я про то что при скроллинге (когда пользователь прокручивает колесико мышки или двигает полосу прокрутки) часть верхних строк становится не видна. Зеленая стрелочка нужна для визуализации (индикации) того, что вверху есть строки, которых в данный момент не видно. В приложенных мной файлах все работает так как надо, есть только одна проблема, когда макрос постоянно выполняется часть функций эксель не доступна, да и ИМХО это не совсем правильно, когда постоянно выполняется зацикленная процедура.Jhonson
"Ничто не приносит людям столько неприятностей, как разум."
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]
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]
nerv, это Cells(1, 1) <> "" я написал в процессе написания макроса, убирая значение в ячейке A1 я останавливал макрос, в файле не исправил (просто забыл ) в самом первом сообщении уже написал:
Quote (nerv)
Do While True ' loop body Loop
Quote (nerv)
Встречный вопрос: уверены, что эта конструкция всегда будет давать нужный Вам результат? If ActiveWindow.ScrollRow = 2 Then
Это будет давать верный результат если область закреплена именно так как у меня в файле, т.е закреплена 1 строка.
Quote (nerv)
Jhonson, отследить прокрутку мышью вряд ли получится (без API). Такого события, насколько мне известно, нет. Да и API не советую подключать, не тот случай, как мне кажется.
А все таки, не подскажете какую именно API использовать? Спать спокойно не могу ! Да, вот еще вопрос, в Excel есть "Редактор сценариев" возможно ли через него внедрить в документ код на JavaScript, т.к. в нем имеется возможность отследить событие Scroll?
nerv, это Cells(1, 1) <> "" я написал в процессе написания макроса, убирая значение в ячейке A1 я останавливал макрос, в файле не исправил (просто забыл ) в самом первом сообщении уже написал:
Quote (nerv)
Do While True ' loop body Loop
Quote (nerv)
Встречный вопрос: уверены, что эта конструкция всегда будет давать нужный Вам результат? If ActiveWindow.ScrollRow = 2 Then
Это будет давать верный результат если область закреплена именно так как у меня в файле, т.е закреплена 1 строка.
Quote (nerv)
Jhonson, отследить прокрутку мышью вряд ли получится (без API). Такого события, насколько мне известно, нет. Да и API не советую подключать, не тот случай, как мне кажется.
А все таки, не подскажете какую именно API использовать? Спать спокойно не могу ! Да, вот еще вопрос, в Excel есть "Редактор сценариев" возможно ли через него внедрить в документ код на JavaScript, т.к. в нем имеется возможность отследить событие Scroll?Jhonson
"Ничто не приносит людям столько неприятностей, как разум."
Сообщение отредактировал Jhonson - Вторник, 27.03.2012, 10:30
Да, вот еще вопрос, в Excel есть "Редактор сценариев" возможно ли через него внедрить в документ код на JavaScript, т.к. в нем имеется возможность отследить событие Scroll?
Событие есть не в js, а в той среде где работает js - браузер
Quote (Jhonson)
Да, вот еще вопрос, в Excel есть "Редактор сценариев" возможно ли через него внедрить в документ код на JavaScript, т.к. в нем имеется возможность отследить событие Scroll?
Событие есть не в js, а в той среде где работает js - браузер
Я не говорил, что событие в JS я написал, что в JS есть возможность отследить событие Scroll.
Quote (nerv)
Событие есть не в js, а в той среде где работает js - браузер
Совершенно согласен, если мы используем его для WEB, но ведь, как я понимаю, в данном случае среда, где работает JS - Excel?
Quote (nerv)
Кстати, Вы знаете js?)
Ну, так слышал немного , есть небольшой опыт работы с HTML, CSS, PHP...
Quote (nerv)
Jhonson, предлагаю этот вопрос задать здесь Интересные вопросы по VBA.
Да, наверное так и поступлю, но вероятно простого решения данного вопроса не найти ... "так что пусть в этой песне все остается как было..." Юрий Клинских
Quote (nerv)
Событие есть не в js, а в той среде где работает js - браузер
Я не говорил, что событие в JS я написал, что в JS есть возможность отследить событие Scroll.
Quote (nerv)
Событие есть не в js, а в той среде где работает js - браузер
Совершенно согласен, если мы используем его для WEB, но ведь, как я понимаю, в данном случае среда, где работает JS - Excel?
Quote (nerv)
Кстати, Вы знаете js?)
Ну, так слышал немного , есть небольшой опыт работы с HTML, CSS, PHP...
Quote (nerv)
Jhonson, предлагаю этот вопрос задать здесь Интересные вопросы по VBA.
Да, наверное так и поступлю, но вероятно простого решения данного вопроса не найти ... "так что пусть в этой песне все остается как было..." Юрий КлинскихJhonson
"Ничто не приносит людям столько неприятностей, как разум."