Форма "кнопка" - постоянное месторасположение на определенных листах
Модератор: Naeel Maqsudov
Доброго времени суток!
Задача: Есть форма "кнопка", кототая вызывает UserForm
Требуется: код, который решает 2 проблемы:
1) Отображение этой формы ТОЛЬКО на предопределенных листах Книги;
2) Местоположение формы НЕ менялось от горизонтальной и/или вертикальной прокрутки активного листа.
Заранее спасибо, может эта тема подымалась и раньше, но нет возможности просмотреть все топики
Задача: Есть форма "кнопка", кототая вызывает UserForm
Требуется: код, который решает 2 проблемы:
1) Отображение этой формы ТОЛЬКО на предопределенных листах Книги;
2) Местоположение формы НЕ менялось от горизонтальной и/или вертикальной прокрутки активного листа.
Заранее спасибо, может эта тема подымалась и раньше, но нет возможности просмотреть все топики
Окно-закрепить области=)
спасибо, но этот вариант проходит если на листе есть закрепление, а требуется метод на уровне VB
- Naeel Maqsudov
- Сообщения: 2570
- Зарегистрирован: 20 фев 2004, 19:17
- Откуда: Moscow, Russia
- Контактная информация:
1)
Форма так или иначе запускается командой типа UserForm1.Show
Используйте вместо этого проверку текущего выделения и листа:
Также такую проверку можно вставить в обработчие события UserForm_Activate(), и закрывать форму, если выбран неподходящий лист. Но будет мигание.
К сожалению события типа BeforeActivate у формы нет.
2)
Не понял вопроса.
Если форма модальная (а она модальная по умолчанию), то прокрутку вы все равно сделать не сможете. А если форма немодальная (открыта по UserForm1.Show 0), то при прокрутке итак положение формы не меняется.
Если имелась в виду кнопка на табочем листе, то это проблема. Тут либо закрепление областей, либо никак. В формате обекта есть конечно пункт "Привязка объекта к фону", но опция "Не перемещать и не изменять размеры" к прокрутке не имеет никакого отношения.
Форма так или иначе запускается командой типа UserForm1.Show
Используйте вместо этого проверку текущего выделения и листа:
Код: Выделить всё
If TypeName(Selection) = "Range" And InStr("*Лист1*Лист6*Лист3*", "*" & ActiveSheet.Name & "*") > 0 Then
UserForm1.Show
End If
К сожалению события типа BeforeActivate у формы нет.
2)
Не понял вопроса.
Если форма модальная (а она модальная по умолчанию), то прокрутку вы все равно сделать не сможете. А если форма немодальная (открыта по UserForm1.Show 0), то при прокрутке итак положение формы не меняется.
Если имелась в виду кнопка на табочем листе, то это проблема. Тут либо закрепление областей, либо никак. В формате обекта есть конечно пункт "Привязка объекта к фону", но опция "Не перемещать и не изменять размеры" к прокрутке не имеет никакого отношения.
Видимо тут имелась ввиду именно кнопка. Я и сам до конца вопрос не понял.
Вообще задача реальная, но сложная. Нужно через винапи определять был ли скроллинг, куда и на сколько и соответственно менять координаты кнопки. Но это только с командбаттон, а не с формой кнопки.
Вообще задача реальная, но сложная. Нужно через винапи определять был ли скроллинг, куда и на сколько и соответственно менять координаты кнопки. Но это только с командбаттон, а не с формой кнопки.
- Naeel Maqsudov
- Сообщения: 2570
- Зарегистрирован: 20 фев 2004, 19:17
- Откуда: Moscow, Russia
- Контактная информация:
Вообще, я на практике не знаю ниодного случая, когда кнопку, которая посстоянно бывает нужна, нельзя вынести в непрокручиваемую область.
Для этого, кстати, и придуманы были панели инструментов. (Тулбары, по ихнему)
Ну да не об этом речь.
Если уж речь зашла о winapi, то в данном случае более грамотно было бы создать оконный объект, дочерний по отношению к окну приложения Excel. Он бы тогда от скроллинга рабочего листа бы не зависел вообще. Висел бы себе в середине мешая обзору
Ну не понимаю я, зачем это нужно.
Для этого, кстати, и придуманы были панели инструментов. (Тулбары, по ихнему)

Ну да не об этом речь.
Если уж речь зашла о winapi, то в данном случае более грамотно было бы создать оконный объект, дочерний по отношению к окну приложения Excel. Он бы тогда от скроллинга рабочего листа бы не зависел вообще. Висел бы себе в середине мешая обзору

Ну не понимаю я, зачем это нужно.
Идея была, наверное, в том, что просматриваешь большой список и в любой момент можешь клацрнуть по кнопке) Но тулбар засорять не хочется)
Будьте любезны, напишите код.Если уж речь зашла о winapi, то в данном случае более грамотно было бы создать оконный объект, дочерний по отношению к окну приложения Excel.
спасибо всем!
1) Да проще, создать кнопки на определенных листах и связать с вызовом UserForm, а не через код VBA;
2)И проще, наверное, создать кнопку в шапке листа и закрепить области
1) Да проще, создать кнопки на определенных листах и связать с вызовом UserForm, а не через код VBA;
2)И проще, наверное, создать кнопку в шапке листа и закрепить области
Идея была, наверное, в том, что просматриваешь большой список и в любой момент можешь клацрнуть по кнопке) Но тулбар засорять не хочется)
Да и еще вопрос:
Разве можно в пользовательскую ТулБар добавить не стандартный инструмент, а, допустим форму "Кнопка", которая сразу на панели вызывала бы макрос?
Извиняюсь за наивные, и может быть некорректные вопросы, но на данный момент Инет - единственный источник информации
Разве можно в пользовательскую ТулБар добавить не стандартный инструмент, а, допустим форму "Кнопка", которая сразу на панели вызывала бы макрос?
Извиняюсь за наивные, и может быть некорректные вопросы, но на данный момент Инет - единственный источник информации
И в нем этой информации по данному вопросу очень много.