Форма "кнопка" - постоянное месторасположение на определенных листах

Весь MS Office, программирование на Visual Basic for Applications и MS VB

Модератор: Naeel Maqsudov

DASh
Сообщения: 11
Зарегистрирован: 20 дек 2007, 21:30

Доброго времени суток!

Задача: Есть форма "кнопка", кототая вызывает UserForm

Требуется: код, который решает 2 проблемы:
1) Отображение этой формы ТОЛЬКО на предопределенных листах Книги;
2) Местоположение формы НЕ менялось от горизонтальной и/или вертикальной прокрутки активного листа.

Заранее спасибо, может эта тема подымалась и раньше, но нет возможности просмотреть все топики
heisnod
Сообщения: 70
Зарегистрирован: 24 ноя 2008, 16:53

Окно-закрепить области=)
DASh
Сообщения: 11
Зарегистрирован: 20 дек 2007, 21:30

спасибо, но этот вариант проходит если на листе есть закрепление, а требуется метод на уровне VB
Аватара пользователя
Naeel Maqsudov
Сообщения: 2570
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

1)
Форма так или иначе запускается командой типа UserForm1.Show
Используйте вместо этого проверку текущего выделения и листа:

Код: Выделить всё

  If TypeName(Selection) = "Range" And InStr("*Лист1*Лист6*Лист3*", "*" & ActiveSheet.Name & "*") > 0 Then
    UserForm1.Show
  End If
Также такую проверку можно вставить в обработчие события UserForm_Activate(), и закрывать форму, если выбран неподходящий лист. Но будет мигание.
К сожалению события типа BeforeActivate у формы нет.

2)
Не понял вопроса.
Если форма модальная (а она модальная по умолчанию), то прокрутку вы все равно сделать не сможете. А если форма немодальная (открыта по UserForm1.Show 0), то при прокрутке итак положение формы не меняется.
Если имелась в виду кнопка на табочем листе, то это проблема. Тут либо закрепление областей, либо никак. В формате обекта есть конечно пункт "Привязка объекта к фону", но опция "Не перемещать и не изменять размеры" к прокрутке не имеет никакого отношения.
heisnod
Сообщения: 70
Зарегистрирован: 24 ноя 2008, 16:53

Видимо тут имелась ввиду именно кнопка. Я и сам до конца вопрос не понял.
Вообще задача реальная, но сложная. Нужно через винапи определять был ли скроллинг, куда и на сколько и соответственно менять координаты кнопки. Но это только с командбаттон, а не с формой кнопки.
Аватара пользователя
Naeel Maqsudov
Сообщения: 2570
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

Вообще, я на практике не знаю ниодного случая, когда кнопку, которая посстоянно бывает нужна, нельзя вынести в непрокручиваемую область.
Для этого, кстати, и придуманы были панели инструментов. (Тулбары, по ихнему) :)
Ну да не об этом речь.
Если уж речь зашла о winapi, то в данном случае более грамотно было бы создать оконный объект, дочерний по отношению к окну приложения Excel. Он бы тогда от скроллинга рабочего листа бы не зависел вообще. Висел бы себе в середине мешая обзору :)
Ну не понимаю я, зачем это нужно.
heisnod
Сообщения: 70
Зарегистрирован: 24 ноя 2008, 16:53

Идея была, наверное, в том, что просматриваешь большой список и в любой момент можешь клацрнуть по кнопке) Но тулбар засорять не хочется)
Если уж речь зашла о winapi, то в данном случае более грамотно было бы создать оконный объект, дочерний по отношению к окну приложения Excel.
Будьте любезны, напишите код.
DASh
Сообщения: 11
Зарегистрирован: 20 дек 2007, 21:30

спасибо всем!
1) Да проще, создать кнопки на определенных листах и связать с вызовом UserForm, а не через код VBA;
2)И проще, наверное, создать кнопку в шапке листа и закрепить области
Идея была, наверное, в том, что просматриваешь большой список и в любой момент можешь клацрнуть по кнопке) Но тулбар засорять не хочется)
DASh
Сообщения: 11
Зарегистрирован: 20 дек 2007, 21:30

Да и еще вопрос:
Разве можно в пользовательскую ТулБар добавить не стандартный инструмент, а, допустим форму "Кнопка", которая сразу на панели вызывала бы макрос?

Извиняюсь за наивные, и может быть некорректные вопросы, но на данный момент Инет - единственный источник информации
heisnod
Сообщения: 70
Зарегистрирован: 24 ноя 2008, 16:53

И в нем этой информации по данному вопросу очень много.
Ответить