SemenTVS 0 / 0 / 0 Регистрация: 27.11.2017 Сообщений: 22 |
||||
1 |
||||
Excel Запуск пользовательской формы при открытии файла19.07.2018, 15:30. Показов 27333. Ответов 7 Метки нет (Все метки)
Пока нашел только такой способ
Но при запуске .xlsm видно как открывается книга, потом скрывается и открывается уже сама форма
0 |
yutrans 140 / 123 / 50 Регистрация: 10.11.2011 Сообщений: 620 |
||||
19.07.2018, 17:11 |
2 |
|||
Может так?
1 |
SemenTVS 0 / 0 / 0 Регистрация: 27.11.2017 Сообщений: 22 |
||||
19.07.2018, 18:02 [ТС] |
3 |
|||
Нет, все также. Добавлено через 32 минуты
вот такая конструкция скрывает, изменяет листы в книге, но при этом окно программы остаётся на месте Или все эти команды я пишу в «этой книге», поэтому имеется задержка, как я понимаю, А имею ли я возможность написать макрос для самого экселя или что там по иерархии выше книги стоит?
0 |
1813 / 1135 / 346 Регистрация: 11.07.2014 Сообщений: 4,002 |
|
19.07.2018, 18:39 |
4 |
поэтому имеется задержка, как я понимаю Скорее это не задержка, а последовательность действий винда. Когда вы кликаете на файл, то вызывается его приложение, при этом файл ещё не открывается и Open ещё не запускается. После открытия окна приложения начинается обработка событий файла, а до этого времени окно приложения будет видно. А стоит ли из-за секунды-двух убиваться? Добавлено через 5 минут
1 |
0 / 0 / 0 Регистрация: 27.11.2017 Сообщений: 22 |
|
19.07.2018, 19:04 [ТС] |
5 |
Можно и не прятать вовсе и секунда не играет роли. Заморозить экран самого виндовса? это мб выход и хороший, но сомневаюсь что я пойму как это делается, тут проблемы программно создавать формы в си, куда там до владения прочих возможностей.
0 |
4131 / 2235 / 940 Регистрация: 01.12.2010 Сообщений: 4,624 |
|
19.07.2018, 21:24 |
6 |
а вот перед запуском приложения заморозить экран не исключено, что возможно, но я этого не знаю Функция LockWindowUpdate (WinAPI) может, но кто и откуда её будет вызывать ?
1 |
1813 / 1135 / 346 Регистрация: 11.07.2014 Сообщений: 4,002 |
|
20.07.2018, 06:17 |
7 |
pashulka, ну так нарисовать скрипт, отрубаем экран, вызываем эксель с загрузкой нужного файла, как параметра. Только после окончания работы приложения не забыть восстановить изменение экрана. И опять же вопрос
А стоит ли из-за секунды-двух убиваться?
1 |
4131 / 2235 / 940 Регистрация: 01.12.2010 Сообщений: 4,624 |
|
20.07.2018, 13:50 |
8 |
Burk, тоже думаю, что не стоит, тем более что из .vbs вызов winapi напрямую невозможен. Можно, конечно, поиграться с set xl = createobject(«excel.application») но …
1 |
IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 |
20.07.2018, 13:50 |
8 |
Прежде чем начать, убедитесь, что на ленте доступна вкладка Разработчик. Дополнительные сведения см. в статье Отображение вкладки «Разработчик».
Чтобы использовать пример ниже, откройте новую книгу.
Важно: Код VBA нельзя отменить, поэтому проверьте код в пустой книге или копии существующей книги. Если код не работает, вы можете закрыть книгу без сохранения изменений.
-
Откройте вкладку Разработчик и щелкните элемент Visual Basic.
-
В обозревателе VBA Project слева разверните папку VBA Project книги, а затем дважды щелкните модуль ThisWorkbook. Если вы не видите обозреватель Project, перейдите в > Project проводникаили нажмите CTRL+R.
-
В окне модуля, которое открывается справа, вставьте следующий код:
Private Sub Workbook_Open() ' Put your code here End Sub
-
В конце и подмножите записи в процедуру Sub.
Закройте редактор Visual Basic (вам не нужно ничего сохранять).
-
Сохраните книгу как книгу Excel Macro-Enabled (XLSM)и закроем ее.
При следующем запуске книги код, добавленный в Workbook_Open, будет работать автоматически.
Прежде чем начать, убедитесь, что на ленте доступна вкладка Разработчик. Для этого:
-
В меню выберите пункт Параметры Excel >… >ленты & панели инструментов.
-
В категории Настройка ленты в списке Основные вкладки выберите вариант Разработчик.
-
Нажмите кнопку Сохранить.
Чтобы использовать пример ниже, откройте новую книгу.
Важно: Код VBA нельзя отменить, поэтому проверьте код в пустой книге или копии существующей книги. Если код не работает, вы можете закрыть книгу без сохранения изменений.
-
Откройте вкладку Разработчик и щелкните элемент Visual Basic.
-
В обозревателе VBA Project слева разверните папку VBA Project книги, а затем дважды щелкните модуль ThisWorkbook.
-
В окне модуля, которое открывается справа, вставьте следующий код:
Private Sub Workbook_Open() ' Put your code here End Sub
-
В конце и подмножите записи в процедуру Sub.
Закройте редактор Visual Basic (вам не нужно ничего сохранять).
-
Сохраните книгу как книгу Excel Macro-Enabled (XLSM)и закроем ее.
При следующем запуске книги код, добавленный в Workbook_Open, будет работать автоматически.
asesja Пользователь Сообщений: 320 |
#1 24.02.2022 23:38:32 Здравствуйте.
Запись ThisWorkbook.Windows(1).Visible = False оставляет пустое окно Excel. Exel остается видимым, а нужно действие такое же как при исполнении кода Application.Visible = False, только для данного файла. т.е. для простого пользователя при двойном клике должна открыться только форма. Если на момент запуска открыты другие файлы Excel, они не должны быть затронуты.. Если данный файл запускается первым, то тоже должна быть видна только форма, без пустого Excel. Изменено: asesja — 25.02.2022 22:21:18 |
||
Дмитрий(The_Prist) Щербаков Пользователь Сообщений: 14182 Профессиональная разработка приложений для MS Office |
#2 25.02.2022 09:45:17
так Вы при закрытии формы возвращайте видимость окна и все будет ОК. Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы… |
||
Александр Моторин Пользователь Сообщений: 958 |
#3 25.02.2022 09:45:56 может так?
|
||
Ігор Гончаренко Пользователь Сообщений: 13746 |
#4 25.02.2022 10:15:41 1. исправьте:
2. Скройте книгу, Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете! |
||
asesja Пользователь Сообщений: 320 |
#5 25.02.2022 11:52:53
Подскажите, как? При каком событии формы? Если файл будет открываться первым, то пустой Excel остается видимым, а нужна только форма. Дописал уточнение. Изменено: asesja — 25.02.2022 11:59:53 |
||
asesja Пользователь Сообщений: 320 |
#6 25.02.2022 11:53:57
Ничего не меняется. Изменено: asesja — 25.02.2022 12:00:57 |
||
asesja Пользователь Сообщений: 320 |
#7 25.02.2022 11:58:19
Спасибо. Думал что уже получилось то что хотел, но если файл запускать первым, то на фоне все равно фигурирует пустое окно Excel, а нужно чтобы была видна только форма. Дописал уточнение. Изменено: asesja — 25.02.2022 12:01:33 |
||
Дмитрий(The_Prist) Щербаков Пользователь Сообщений: 14182 Профессиональная разработка приложений для MS Office |
#8 25.02.2022 12:02:23
так а как Вы хотели-то? Если открыта только одна книга, а Вы и ту скрываете. Да, будет пустое приложение. Определитесь для начала, что при каких условиях должно быть видимым и тогда можно будет решение найти.
а если мы эту книгу открыли не первой? Тогда что?
событие закрытия формы. Есть там такое QueryClose Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы… |
||||||
asesja Пользователь Сообщений: 320 |
#9 25.02.2022 12:46:54
Дмитрий, дописал уточнение в первом сообщении. |
||
Jack Famous Пользователь Сообщений: 10848 OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome |
#10 25.02.2022 12:51:29
засуньте форму в нвдстройку и подключите к Excel — теперь форма всегда будет доступна, никакие дополнительные книги не будут открываться и это очень легко и правильно Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄ |
||
asesja Пользователь Сообщений: 320 |
#11 25.02.2022 13:11:20
В надстройку не нужно. Нужный мне макрос должен находится в фале и форма должна появляться при его запуске (как будто запускаешь exe в котором при запуске выводится форма) |
||
Ігор Гончаренко Пользователь Сообщений: 13746 |
#12 25.02.2022 13:17:41 код в сообщении 4 замените на такой:
Изменено: Ігор Гончаренко — 25.02.2022 13:22:34 Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете! |
||
Дмитрий(The_Prist) Щербаков Пользователь Сообщений: 14182 Профессиональная разработка приложений для MS Office |
#13 25.02.2022 13:27:06
это никак не вяжется с этим
Но тем не менее, сделать можно так:
осталось понять, что именно делать при закрытии формы — закрывать так же файл или нет. Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы… |
||||||
asesja Пользователь Сообщений: 320 |
#14 25.02.2022 13:35:30
Не работает. Если имеются открытые файлы excel, то при запуске просто моргает окно и закрывается. Если открывать файл первым, то запускается пустой Excel без формы. |
||
asesja Пользователь Сообщений: 320 |
#15 25.02.2022 13:37:36
Дмитрий, да закрывать. Правильно спросили. |
||
RAN Пользователь Сообщений: 7091 |
#16 25.02.2022 13:47:16
|
||
Дмитрий(The_Prist) Щербаков Пользователь Сообщений: 14182 Профессиональная разработка приложений для MS Office |
#17 25.02.2022 13:50:52
Т.е. сами по образцу это сделать не сможете, что ли?
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы… |
||||
asesja Пользователь Сообщений: 320 |
#18 25.02.2022 13:51:46
Дмитрий, не работает. Форма открывается вместе с книгой. |
||
Дмитрий(The_Prist) Щербаков Пользователь Сообщений: 14182 Профессиональная разработка приложений для MS Office |
#19 25.02.2022 13:54:07
с какой именно? Куда и на какое событие вставляли код? Чего от кода ожидаете? Изменено: Дмитрий(The_Prist) Щербаков — 25.02.2022 13:55:30 Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы… |
||
asesja Пользователь Сообщений: 320 |
#20 25.02.2022 14:01:10
Ран, почти то, что нужно, но если открыть первым файл с макросом, то затем любой следующий открытый файл Excel делает видимым Excel у которого форма. |
||
Дмитрий(The_Prist) Щербаков Пользователь Сообщений: 14182 Профессиональная разработка приложений для MS Office |
#21 25.02.2022 14:03:34
так в условии не было ни слова о том, что надо отслеживать еще и последующие открываемые файлы! Вы сами понимаете, что одним кодом это действие не отследить? Надо писать обработку класса на отслеживание событий приложения, чтобы проверять — если форма открыта, то одно, если нет, то другое… Изменено: Дмитрий(The_Prist) Щербаков — 25.02.2022 14:12:57 Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы… |
||
Jack Famous Пользователь Сообщений: 10848 OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome |
От вам не лень, ей богу Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄ |
asesja Пользователь Сообщений: 320 |
#23 25.02.2022 14:13:56
Дмитрий, извините, но просто моргает и закрывается. Наверное буду решать вопрос как-то по другому, если нельзя сделать так, как я спросил. Изменено: asesja — 25.02.2022 14:16:53 |
||
Дмитрий(The_Prist) Щербаков Пользователь Сообщений: 14182 Профессиональная разработка приложений для MS Office |
#24 25.02.2022 14:19:01
не знаю, что у Вас там происходит. Информации мало — нужно точно знать, установлено ли свойство формы ShowModal в true. Если нет — то так и будет моргать и закрываться, т.к. в этом случае форма запускается и не происходит ожидания её закрытия и код идет дальше — следовательно книга просто закрывается. Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы… |
||
asesja Пользователь Сообщений: 320 |
#25 25.02.2022 14:19:55
Дмитрий, ShowModal = False. Если true, то работа с другими файлами не возможна, как вы и написали. Изменено: asesja — 25.02.2022 14:24:45 |
||
Дмитрий(The_Prist) Щербаков Пользователь Сообщений: 14182 Профессиональная разработка приложений для MS Office |
#26 25.02.2022 14:21:09
это вопрос о чем? Краткость не всегда сестра таланта. Я вроде выше все расписал. Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы… |
||
пора автору дать возможность помедитировать, подумать над задачей…. Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете! |
|
asesja Пользователь Сообщений: 320 |
#28 25.02.2022 14:25:24
Дмитрий, исправил. |
||
Дмитрий(The_Prist) Щербаков Пользователь Сообщений: 14182 Профессиональная разработка приложений для MS Office |
#29 25.02.2022 14:31:18
ну так это у Вас проблемы с базовым пониманием принципов работы с формами. Я уже выше пояснил — если работаете с формой в немодальном режиме — то вот эти строки:
выполняются сразу без остановок.
и продумывать логику действий исходя из всех условий(открытие файлов в процессе работы с формой и поведение приложения и формы в этих случаях). Изменено: Дмитрий(The_Prist) Щербаков — 25.02.2022 14:32:06 Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы… |
||||||
asesja Пользователь Сообщений: 320 |
#30 25.02.2022 14:47:19 Спасибо, всем, кто отозвался. Все правы, что задача сформулирована не полностью. Формулировка после получения и апробации предложенных вариантов: Изменено: asesja — 25.02.2022 22:33:11 |
Узнай цену своей работы
Формулировка задачи:
Подскажите как сделать так что бы при открытии файла excel сразу же вылазила форма (и не давала работать пока ее не закроешь)
Код к задаче: «Автозапуск userforms (пользовательской формы)»
textual
Листинг программы
Private Sub Workbook_Open() UserForm1.Show vbModal End Sub
Полезно ли:
9 голосов , оценка 4.111 из 5
Похожие ответы
- Размер пользовательской формы
- Расположение пользовательской формы на экране
- Общий обработчик событий CheckBox на листе Excel (не форме)
- Сравнения значений столбца с полем формы
- Gif анимация на форме vba
- Удаление созданного файла jpg, из которого скопирована картинка в форму
- Событие-закрыл форму
- Ввод данных в таблицу с формы
- VBA EXCEL, как открыть форму с названием, выбранном из другой формы
- Управление формами
- Progressbar в форме
Содержание
- Заставка при открытии книги Excel
- Шаг 1. Создаем экранную форму
- Шаг 2. Добавляем управляющий код
- Как это работает?
- Ссылки по теме
- VBA Excel. Первая форма (для начинающих)
- Создание пользовательской формы
- Добавление элементов управления
- Отображение формы на экране
- Автоматический запуск макроса при открытии книги
- Дополнительные сведения
- Работа с пользовательскими формами в VBA
- Вставка новой формы UserForm
- Добавление элементов управления в пользовательское диалоговое окно
- Элементы управления в окне Toolbox
- Использование элементов управления на рабочем листе
- Настройка элементов управления пользовательского диалогового окна
- Изменение свойств элементов управления
- Отображение пользовательского диалогового окна
Заставка при открытии книги Excel
Этот прием позволит Вам выводить на экран окно-заставку при открытии любой заданной книги в Excel.
Заставка появляется сразу после открытия файла и автоматически исчезает через несколько секунд.
Шаг 1. Создаем экранную форму
Откройте редактор Visual Basic — в старых версиях Excel это можно сделать через меню Сервис — Макрос — Редактор Visual Basic (Tools — Macro — Visual Basic Editor) , а в новых кнопкой Visual Basic на вкладке Разработчик (Developer) и создайте новую форму, используя команду меню Insert — UserForm. Появится пустая серая оконная форма будущей заставки. Добавим на нее изображение при помощи панели инструментов Toolbox (если у вас ее не видно, то зайдите в меню View — Toolbox):
Нажмите кнопку Image и растяните на форме прямоугольник — в него будет помещено фоновое изображение. Затем на панели инструментов Properties (если у вас ее не видно, то выберите в меню View — Properties) задайте выберите файл картинки в поле Picture:
Возможно, придется немного изменить размер формы, чтобы изображение уместилось полностью. Чтобы написать на форме текст, можно использовать элемент управления Label с панели Toolbox.
Ну, и наконец, выделив предварительно всю форму, можно задать текст в строке заголовка, используя свойство Caption в панели Properties:
В итоге у вас должно получиться нечто подобное:
Шаг 2. Добавляем управляющий код
Щелкните правой кнопкой мыши по форме и выберите View Code. В открывшийся модуль формы добавьте такой код:
Откройте модуль ЭтаКнига в левом верхнем углу (если ее не видно — отобразите соответствующее окно через меню View — Project Explorer) и добавьте в него следующий код:
И, наконец, вставьте обычный модуль (Insert — Module) и скопируйте туда это:
Все. Можно закрывать редактор Visual Basic, сохранять файл и пробовать закрыть-открыть книгу.
Как это работает?
При открытии книги Excel выполняет процедуру Workbook_Open из модуля ЭтаКнига. Эта процедура отображает на экране нашу форму-заставку. При отображении формы запускается процедура UserForm_Activate, которая с задержкой в 5 секунд запускает макрос KillTheForm, который убирает форму с экрана.
Ссылки по теме
Привет! Отличный макрос, только если отчет с этим макросом открывать из письма Outlook высвечивается следующая ошибка: Run-time error ‘1004’: Metod ‘Ontime’ of object ‘_Application’ faild.
Когда сохраняешь файл на компьютер — этой ошибки нет. Можно это как-то исправить?
Попробовал это упражнение.
Результат такой: в Excel 2010 все отлично работает.
А в 2013 — проходят отмеренные 5 секунд и выскакивает ошибка «Run-time error ‘424’ Object required»
При попытке отладить подсвечивается последняя строчка End Sub в модуле KillTheForm.
Единственное, что я переименовал UserForm1 в Hello и дважды заменил его название в коде.
Попробовал без переименования — все работает.
Подскажите, пожалуйста, в чем моя ошибка?
Добрый день, не могли бы вы подсказать, почему при добавлении такой заставки мог поломаться автобэкап, созданный полностью по уроку:
Создание резервных копий ценных файлов Поломался он так, что не выдает никаких ошибок, просто не появляется файл в папке сохранения.
Наверно это что-то связанное с созданием Userform, и конфликтом в исполнении модуля с бекапом и формы. Сначала я переименовал форму, естественно, поменяв все необходимые ссылки на неё в текущей книге и модуле2. Обнаружил проблему с бэкапом. Подумал, решил, может быть, макросы выполняются при запуске в иерархичном порядке, переименовал userform так, чтобы в списке модулей он отображался позже модуля бэкапа. Не помогло. Возникла следующая идея. Удалил модуль2, относящийся к картинке, макрос оттуда добавил в модуль1(бэкап). Тоже не помогло. Картинка как работала, так и работает, но бэкап не сохраняется. Новых идей у меня, к сожалению, пока не возникло. Походу придется удалять заставку, так как функция бэкапа, объективно, важнее всяких картиночек.
Николай, обращаюсь к вам за советом, может быть вы знаете, в чем проблема, и надеюсь, что вы увидите и ответите. Заранее спасибо.
upd. Вопрос решил, добавив в макрос в ЭтаКнига строку Module1.auto_open .
p.s. Я тыкаюсь в vba как слепой котенок, но чаще всего это приносит свои плоды.
Добрый день, а защитил макрос, во время закрывание книг, спрашивает VBA пороль.
Подскажите, пожалуйста, в чем моя ошибка?
И еще, в модулье ЭтаКнига у меня ранше был вот токой запис.
Источник
VBA Excel. Первая форма (для начинающих)
Пример создания пользовательской формы в редакторе VBA Excel для начинающих программировать с нуля. Добавление на форму текстового поля и кнопки.
Начинаем программировать с нуля
Часть 4. Первая форма
[Часть 1] [Часть 2] [Часть 3] [Часть 4]
Создание пользовательской формы
Создайте или откройте файл Excel с расширением .xlsm (Книга Excel с поддержкой макросов) или с расширением .xls в старых версиях приложения.
Перейдите в редактор VBA, нажав сочетание клавиш «Левая_клавиша_Alt+F11».
В открывшемся окне редактора VBA выберите вкладку «Insert» главного меню и нажмите кнопку «UserForm». То же подменю откроется при нажатии на вторую кнопку (после значка Excel) на панели инструментов.
На экране редактора VBA появится новая пользовательская форма с именем «UserForm1»:
Добавление элементов управления
Обычно вместе с пользовательской формой открывается панель инструментов «Toolbox», как на изображении выше, с набором элементов управления формы. Если панель инструментов «Toolbox» не отобразилась, ее можно вызвать, нажав кнопку «Toolbox» во вкладке «View»:
При наведении курсора на элементы управления появляются подсказки.
Найдите на панели инструментов «Toolbox» элемент управления с подсказкой «TextBox», кликните по нему и, затем, кликните в любом месте рабочего поля формы. Элемент управления «TextBox» (текстовое поле) будет добавлен на форму.
Найдите на панели инструментов «Toolbox» элемент управления с подсказкой «CommandButton», кликните по нему и, затем, кликните в любом месте рабочего поля формы. Элемент управления «CommandButton» (кнопка) будет добавлен на форму.
Кликнув по элементу управления на форме, вы можете изменять его размер, перетягивая границы за белые квадратики, и перетаскивать по форме, ухватив за одну из границ. Кликнув по заголовку формы или по ее рабочему полю, вы можете также изменять ее размер, перетягивая границы за белые квадратики.
Нажатием клавиши «F4» вызывается окно свойств, с помощью которого можно вручную задавать значения свойств пользовательской формы и элементов управления. В окне свойств отображаются свойства выбранного элемента управления или формы, если выбрана она. Также окно свойств можно вызвать, нажав кнопку «Properties Window» во вкладке «View».
Отображение формы на экране
Чтобы запустить пользовательскую форму для просмотра из редактора VBA, необходимо выбрать ее, кликнув по заголовку или свободному от элементов управления полю, и совершить одно из трех действий:
- нажать клавишу «F5»;
- нажать на треугольник на панели инструментов (на изображении выше треугольник находится под вкладкой «Debug»);
- нажать кнопку «Run Sub/UserForm» во вкладке «Run».
Для запуска пользовательской формы с рабочего листа Excel, можно использовать кнопки, описанные в этой статье. Например, чтобы отобразить форму с помощью «кнопки – элемента ActiveX», используйте в модуле рабочего листа следующий код:
Источник
Автоматический запуск макроса при открытии книги
Может потребоваться, чтобы макрос, записанный вами, запускался автоматически при запуске определенной книги. В следующей процедуре используется пример, чтобы показать, как это работает. Кроме того, может потребоваться автоматически запускатьмакрос при Excel запуска .
Прежде чем начать, убедитесь, что на ленте доступна вкладка Разработчик. Дополнительные сведения см. в статье Отображение вкладки «Разработчик».
Чтобы использовать пример ниже, откройте новую книгу.
Важно: Код VBA нельзя отменить, поэтому проверьте код в пустой книге или копии существующей книги. Если код не работает, вы можете закрыть книгу без сохранения изменений.
Откройте вкладку Разработчик и щелкните элемент Visual Basic.
В обозревателе VBA Project слева разверните папку VBA Project книги, а затем дважды щелкните модуль ThisWorkbook. Если вы не видите обозреватель Project, перейдите в > Project проводникаили нажмите CTRL+R.
В окне модуля, которое открывается справа, вставьте следующий код:
В конце и подмножите записи в процедуру Sub.
Закройте редактор Visual Basic (вам не нужно ничего сохранять).
Сохраните книгу как книгу Excel Macro-Enabled (XLSM)и закроем ее.
При следующем запуске книги код, добавленный в Workbook_Open, будет работать автоматически.
Прежде чем начать, убедитесь, что на ленте доступна вкладка Разработчик. Для этого:
В меню выберите пункт Параметры Excel >. > ленты & панели инструментов.
В категории Настройка ленты в списке Основные вкладки выберите вариант Разработчик.
Нажмите кнопку Сохранить.
Чтобы использовать пример ниже, откройте новую книгу.
Важно: Код VBA нельзя отменить, поэтому проверьте код в пустой книге или копии существующей книги. Если код не работает, вы можете закрыть книгу без сохранения изменений.
Откройте вкладку Разработчик и щелкните элемент Visual Basic.
В обозревателе VBA Project слева разверните папку VBA Project книги, а затем дважды щелкните модуль ThisWorkbook.
В окне модуля, которое открывается справа, вставьте следующий код:
В конце и подмножите записи в процедуру Sub.
Закройте редактор Visual Basic (вам не нужно ничего сохранять).
Сохраните книгу как книгу Excel Macro-Enabled (XLSM)и закроем ее.
При следующем запуске книги код, добавленный в Workbook_Open, будет работать автоматически.
Дополнительные сведения
Вы всегда можете задать вопрос специалисту Excel Tech Community или попросить помощи в сообществе Answers community.
Источник
Работа с пользовательскими формами в VBA
В настоящей заметке рассматриваются методы создания пользовательских форм и работы с ними.[1] Пользовательские диалоговые окна создаются на основе технологии пользовательских форм, к которым можно получить доступ из редактора Visual Basic (VBE; подробнее см. Настройка среды Visual Basic Editor).
Рис. 1. Окно новой пустой формы UserForm
Скачать заметку в формате Word или pdf, примеры в формате архива
Стандартная последовательность шагов при этом следующая:
- Вставьте новую форму UserForm в проект VBAProject рабочей книги.
- Добавьте элементы управления в форму UserForm.
- Настройте свойства добавленных элементов управления.
- Создайте процедуры «обработчики событий» для элементов управления. Эти процедуры добавляются в модуль кода UserForm и выполняются при возникновении различных событий (например, при щелчке на кнопке).
- Разработайте процедуру, которая отображает форму UserForm. Эта процедура находится в модуле VBA (а не в модуле кода для формы UserForm).
- Определите простой способ вызова на выполнение процедуры, созданной в п. 5. Можно поместить кнопку на рабочий лист, команду ленты и т.д.
Рассмотрим эти шаги подробнее.
Вставка новой формы UserForm
Добавление элементов управления в пользовательское диалоговое окно
Чтобы добавить элементы управления в форму UserForm, воспользуйтесь панелью Toolbox. Обратите внимание, что в VBE отсутствуют команды меню, предназначенные для добавления элементов управления. Если панель Toolbox не отображена на экране, пройдите по меню View –> Toolbox (рис. 2).
Рис. 2. Окно Toolbox для добавления элементов управления в пользовательскую форму
Щелкните на той кнопке в панели Toolbox, которая соответствует добавляемому элементу управления. После этого щелкните внутри диалогового окна для создания элемента управления (используется размер элемента по умолчанию). Также можно щелкнуть на элементе управления и, перетащив его границы в диалоговом окне, задать необходимый размер в пользовательском диалоговом окне. Добавленному элементу управления назначается имя, которое состоит из названия типа элемента управления и числового кода. Рекомендуется их переименовать, чтобы в коде VBA было понятно, с чем вы имеете дело. Согласитесь, что РrоductListBox звучит лучше, чем ListBox1.
Элементы управления в окне Toolbox
Форма UserForm, которая показана на рис. 3, размещена в файле all userform controls.xlsm.
Рис. 3. Эта форма UserForm содержит 15 элементов управления
Элемент управления CheckBox (6) предоставляет пользователю возможность выбрать один из двух вариантов: включить или выключить. Если галочка установлена, то CheckBox имеет значение True, в противном случае – False.
ComboBox (4) подобен объекту ListBox (5). Отличие заключается в том, что ComboBox представляет раскрывающийся список, в котором в определенный момент времени отображается только одно значение. Кроме того, пользователю в поле списка разрешено вводить значение, которое необязательно представляет одну из опций объекта ComboBox.
Каждое создаваемое диалоговое окно будет иметь как минимум один элемент управления CommandButton (10). Обычно используются кнопки ОК и Отмена.
Элемент управления Frame (9) применяется в качестве оболочки для других элементов управления. Он добавляется в диалоговое окно либо в целях эстетики, либо из соображений логического группирования однотипных элементов управления. Элемент управления Frame требуется в случае, если в диалоговом окне содержится более одного набора элементов управления OptionButton.
Элемент управления Image (15) используется для представления графического изображения, которое сохранено в отдельном файле или вставляется из буфера обмена. Графическое изображение сохраняется вместе с рабочей книгой. Таким образом, вместе с рабочей книгой передавать другому пользователю копию графического файла необязательно. Некоторые графические файлы занимают много места, поэтому их включение в рабочую книгу приведет к радикальному увеличению ее размера.
Элемент управления Label (2) отображает текст в диалоговом окне.
Элемент управления ListBox (5) предоставляет список опций, из которого пользователь может выбрать один вариант (или несколько). Вы вправе указать диапазон на листе, который содержит элементы списка. Этот диапазон может состоять из нескольких столбцов. Кроме того, элемент управления ListBox может заполняться с помощью кода VBA.
Элемент управления MultiPage (12) позволяет создавать диалоговые окна с несколькими вкладками, которые подобны появляющимся после выбора команды Формат ячеек. По умолчанию элемент управления MultiPage состоит из двух вкладок.
Элемент управления OptionButton (7) применяется при выборе пользователем одного варианта из нескольких. Эти элементы управления всегда группируются в диалоговом окне в наборы, содержащие не менее двух опций. Когда один элемент управления OptionButton выбран, все остальные элементы управления OptionButton текущей группы автоматически становятся неактивными. Если в пользовательском диалоговом окне содержится более одного набора элементов управления OptionButton, то каждый из таких наборов должен иметь собственное значение свойства GroupName. В противном случае все элементы управления OptionButton в диалоговом окне рассматриваются как члены одной группы. Также можно вставить элементы управления OptionButton в объект Frame, что приведет к их автоматическому группированию.
Элемент управления RefEdit (16) используется тогда, когда пользователь должен выделить диапазон ячеек на листе.
Элемент управления ScrollBar (13) в некотором смысле подобен элементу управления SpinButton. Разница заключается в том, что пользователь может перетаскивать ползунок объекта ScrollBar для изменения значения с большим приращением. Элемент управления ScrollBar рекомендуется использовать при выборе значения из большого диапазона.
Элемент управления SpinButton (14) позволяет выбрать значение после щелчка на одной из двух кнопок со стрелками. Одна из них применяется для увеличения значения, а вторая — для уменьшения. Элемент управления SpinButton часто используется совместно с элементами управления TextBox и Label, которые содержат текущее значение элемента управления SpinButton.
Элемент управления TabStrip (11) подобен элементу управления MultiPage, однако использовать его сложнее. Элемент управления TabStrip, в отличие от MultiPage, не выступает контейнером для других объектов. Как правило, элемент управления MultiPage обладает более широкими возможностями.
Элемент управления TextBox (3) позволяет пользователям вводить текст в диалоговом окне.
Элемент управления ToggleButton (8) имеет два состояния: включен и выключен. Щелчок на кнопке приводит к изменению состояния на противоположное и к изменению внешнего вида кнопки. Этот элемент управления может иметь значение True (активен) или False (неактивен). Он не относится к «стандартным» элементам управления, поэтому использование двух элементов управления OptionButton или одного CheckBox может оказаться более удачным вариантом.
Использование элементов управления на рабочем листе
Элементы управления пользовательскими диалоговыми окнами могут встраиваться в рабочий лист (без использования UserForm). Доступ к элементам управления можно получить, пройдя в Excel Разработчик –> Элементы управления –> Вставить. Для использования подобных элементов в составе рабочего листа требуется гораздо меньше усилий, чем для создания пользовательского диалогового окна. Кроме того, в данном случае можно не создавать макросы, поскольку элемент управления можно связать с ячейкой рабочего листа.
Например, если на рабочий лист вставить элемент управления CheckBox, его можно связать с нужной ячейкой, задав свойство LinkedCell. Если флажок установлен, в связанной ячейке отображается значение ИСТИНА. Если же флажок сброшен, то в связанной ячейке отображается значение ЛОЖЬ. Например, на рис. 4 переключатель «Фикс. Ставка 20%» связан с ячейкой Н15. Рисунок отображает рабочий лист, содержащий некоторые элементы управления ActiveX (см. файл activex worksheet controls.xlsx). Книга включает связанные ячейки и не содержит макросов.
Рис. 4. Элементы управления ActiveX без макросов
Элементы управления на рабочем листе могут происходить из двух источников:
- Элементы управления формами. Эти элементы управления являются внедряемыми объектами.
- Элементы управления ActiveX. Эти элементы управления являются подмножеством элементов, доступных в пользовательских диалоговых окнах.
Эти элементы управления работают не одинаково. После добавления элемента управления ActiveX в рабочий лист Excel переходит в режим конструктора. В этом режиме можно настраивать свойства любого элемента управления рабочего листа, добавлять или изменять процедуры обработки событий для элемента управления, а также изменять его размер или положение. Для отображения окна свойств элемента управления ActiveX воспользуйтесь командой Разработчик –> Элементы управления –> Свойства.
Для создания простых кнопок можно использовать элемент управления Button (Кнопка), который находится на панели инструментов Формы (Form). В этом случае обеспечивается возможность запуска макроса. Если же воспользоваться элементом управления CommandButton, который относится к группе элементов управления ActiveX, то после щелчка на нем вызывается связанная процедура обработки событий (например, CommandButton1_Click), которая находится в модуле кода объекта Лист (Sheet). Связать макрос с этой процедурой нельзя.
Если Excel находится в режиме конструктора, тестирование элементов управления невозможно. В этом случае нужно выйти из режима конструктора, щелкнув на кнопке Разработчик –> Элементы управления –> Режим конструктора. Эта кнопка работает, как переключатель.
Настройка элементов управления пользовательского диалогового окна
Продолжим описание использования элементов управления в UserForm. После того, как элементов управления помещен в диалоговое окно, его можно переместить и изменить размер. Можно выделить несколько элементов управления. Для этого следует удерживать нажатой клавишу и щелкать на объектах либо обвести указателем мыши необходимые элементы управления.
В форме UserForm содержатся вертикальные и горизонтальные направляющие, которые помогают выровнять добавленные в диалоговое окно элементы управления. При добавлении или перемещении элемент управления привязывается к направляющим, что облегчает упорядочение таких элементов в окне. Если вы не используете направляющие, можете их отключить, выбрав в VBE команду Tools –> Options. В диалоговом окне Options перейдите на вкладку General и выберите соответствующие параметры в разделе Form Grid Settings.
Меню Format окна VBE предоставляет несколько команд, которые позволяют точно разместить и выровнять элементы управления в диалоговом окне. Перед использованием этих команд необходимо указать элементы управления, к которым они будут применяться (рис. 5).
Рис. 5. Выравнивание элементов в форме UserForm
Если выделено несколько элементов управления, на выделяющей рамке одного из них (обычно последнего) вместо обычных черных маркеров появляются белые. Это означает, что этот элемент управления играет роль основы, на базе которой определяются размеры и расположение других элементов управления.
Изменение свойств элементов управления
Каждый элемент управления характеризуется набором параметров, которые определяют внешний вид и поведение элемента управления. Свойства элемента управления можно изменять в следующих случаях:
- В момент проектирования при разработке пользовательского диалогового окна. Для этого используется окно Properties.
- В процессе выполнения, когда пользовательское диалоговое окно отображается на экране. Для этого воспользуйтесь инструкциями VBA.
Работа с окном Properties. В VBE окно Properties позволяет изменять свойства выделенного элемента управления (это может быть обычный элемент управления или сама форма UserForm, рис. 6).
Рис. 6. Окно Properties для выделенного элемента управления OptionButton
В окне Properties есть две вкладки. На вкладке Alphabetic свойства выбранного объекта отображаются в алфавитном порядке. На вкладке Categorized эти свойства сгруппированы по категориям. Обе вкладки отображают одни и те же свойства.
Для того чтобы изменить свойство, необходимо щелкнуть на нем и ввести новое значение. Некоторые свойства могут принимать только ограниченный набор допустимых значений, выбираемых из соответствующего списка. После щелчка на таком свойстве в окне Properties будет отображена кнопка со стрелкой, указывающей вниз. Щелкните на этой кнопке, чтобы выбрать значение из предложенного списка. Например, свойство TextAlign может принимать одно из следующих значений: 1 — fmTextAlignLeft, 2 — fmTextAlignCenter и 3 — fmTextAlignRight.
После выделения отдельных свойств (например, Font и Picture) рядом с ними отображается небольшая кнопка с троеточием. Щелчок на этой кнопке приводит к вызову диалогового окна настройки свойства.
Для свойства Picture элемента управления Image необходимо указать графический файл или вставить изображение из буфера обмена. В последнем случае следует сначала скопировать его в буфер обмена, а затем выбрать свойство Picture элемента управления Image и нажать комбинацию клавиш для вставки содержимого буфера обмена. Если выделить два или более элементов управления одновременно, в окне Properties отобразятся только те свойства, которые являются общими для этих объектов.
Объекту UserForm присущ ряд свойств, значения которых можно изменять. Эти свойства применяются в качестве значений, заданных по умолчанию, для элементов управления, которые добавляются в пользовательские диалоговые окна. Например, если изменить свойство Font пользовательского диалогового окна, все добавленные в окно элементы управления будут применять этот шрифт.
Общие свойства. Каждый элемент управления имеет как собственный набор уникальных свойств, так и ряд общих свойств, присущих другим элементам управления. Например, все элементы управления имеют свойство Name и свойства, определяющие его размер и расположение на форме (Height, Width, Left и Right). Если вы собираетесь работать с элементом управления с помощью кода VBA, присвойте ему значащее имя. Например, первый элемент управления OptionButton, который добавлен в пользовательское диалоговое окно, по умолчанию получит имя ОрtionButton1. В коде ссылка на этот объект будет выглядеть следующим образом: OptionButton1.Value = True. Но если элементу управления OptionButton присвоить описательное имя (например, obLandscape), то можно использовать такой оператор: obLandscape.Value = True.
Многие пользователи предпочитают имена, которые указывают на тип объекта. В предыдущем примере был использован префикс ob, который указывает на то, что объект является элементом управления OptionButton.
Можно изменять значения свойств нескольких элементов управления одновременно. Например, вы вправе создать на форме несколько элементов управления OptionButton и выровнять их по левому краю. Для этого достаточно выделить все элементы управления OptionButton и изменить значение свойства Left в окне Properties. Все выделенные элементы управления примут новое значение свойства Left.
Чтобы получить доступ к справочной информации о свойствах различных элементов управления, щелкните на свойстве в окне Properties и нажмите клавишу .
Советы по использованию клавиатуры. Многие пользователи предпочитают перемещаться по диалоговым окнам с помощью клавиатуры. Комбинации клавиш и позволяют циклически переключаться между элементами управления. Чтобы удостовериться, что диалоговое окно корректно реагирует на команды с клавиатуры, обратите внимание на такие моменты: порядок просмотра элементов управления и комбинации клавиш.
Порядок просмотра определяет последовательность, в которой активизируются элементы управления после нажатия пользователем клавиши или комбинации клавиш . Кроме того, порядок активизации указывает, какой элемент управления по умолчанию выделяется на форме первым. Если пользователь вводит текст в элемент управления TextBox, то этот элемент считается активным. Если после этого щелкнуть на элементе управления OptionButton, то именно он станет активным. Элемент управления, назначенный первым для просмотра, будет активным в момент открытия диалогового окна.
Для того чтобы указать порядок активизации, выберите команду View –> Tab Order. Кроме того, можно щелкнуть правой кнопкой мыши на UserForm и выбрать пункт Тab Order из появившегося контекстного меню. Excel отобразит диалоговое окно Tab Order (Порядок просмотра, рис. 7).
Рис. 7. В диалоговом окне Tab Order измените порядок просмотра элементов управления
Также можно указать порядок активизации элемента управления с помощью окна Properties (см. рис. 6, самое последнее из отраженных свойств). Первый активизируемый элемент управления будет иметь свойство Tablndex = 0. Изменение значения свойства Tablndex текущero объекта приведет к изменению значений свойств Tablndex других элементов правления. Изменения вносятся автоматически. Вы можете удостовериться в том, что значения свойства Tablndex всех элементов управления не больше количества элементов управления в диалоговом окне. Если нужно удалить элемент управления из списка активизируемых объектов, то присвойте его свойству TabStop значение False.
Одни элементы управления, такие как Frame и MultiPage, служат контейнерами для других элементов управления. Элементы управления в таком контейнере имеют собственный порядок просмотра (активизации). Для установки порядка просмотра группы элементов управления OptionButtons, находящихся внутри элемента управления Frame, выделите элемент управления Frame до того, как будет выполнена команда View –> Tab Order.
Большинству элементов управления диалогового окна можно назначить комбинацию клавиш. Таким образом, пользователь получит доступ к элементу управления, нажав и указанную клавишу. Применив свойство Accelerator в окне Properties, можно определить клавишу для активизации элемента управления.
Некоторые элементы управления, например, TextBox, лишены свойства Accelerator, поскольку не отображают значение свойства Caption. Но к таким элементам можно получить доступ с помощью клавиатуры, воспользовавшись свойством Label. Присвойте клавишу элементу управления Label и расположите его в порядке просмотра перед элементом TextBox.
Отображение пользовательского диалогового окна
Для того чтобы отобразить пользовательское диалоговое окно с помощью VBA, необходимо создать процедуру, которая вызывает метод Show объекта UserForm. Форму UserForm невозможно отобразить, не выполнив как минимум одну строку кода VBA:
Источник