Автозапуск userform в excel

SemenTVS

0 / 0 / 0

Регистрация: 27.11.2017

Сообщений: 22

1

Excel

Запуск пользовательской формы при открытии файла

19.07.2018, 15:30. Показов 27333. Ответов 7

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

Пока нашел только такой способ

Visual Basic
1
2
3
4
Private Sub Workbook_Open()  
    Application.Visible = False
    Call UserForm1.Show 
End Sub

Но при запуске .xlsm видно как открывается книга, потом скрывается и открывается уже сама форма
Можно ли реализовать моментальный запуск пользовательской формы без открытия листа или открытия листа уже невидимым?



0



yutrans

140 / 123 / 50

Регистрация: 10.11.2011

Сообщений: 620

19.07.2018, 17:11

2

Может так?

Visual Basic
1
2
3
4
5
Private Sub Workbook_Open()
 Application.ScreenUpdating = False ''выключили обновление экрана
    Application.Visible = False 
    Call UserForm1.Show
End Sub



1



SemenTVS

0 / 0 / 0

Регистрация: 27.11.2017

Сообщений: 22

19.07.2018, 18:02

 [ТС]

3

Нет, все также.

Добавлено через 32 минуты

Visual Basic
1
2
3
With Windows("рабочая книжка.xlsm")
      .Visible = False
End With

вот такая конструкция скрывает, изменяет листы в книге, но при этом окно программы остаётся на месте
Это навело на мысль а можно программно изменить размер главного окна на минимум, а потом и скрытным сделать и/или сразу увести его за экран ,типо .Left = 999

Или все эти команды я пишу в «этой книге», поэтому имеется задержка, как я понимаю, А имею ли я возможность написать макрос для самого экселя или что там по иерархии выше книги стоит?



0



1813 / 1135 / 346

Регистрация: 11.07.2014

Сообщений: 4,002

19.07.2018, 18:39

4

Цитата
Сообщение от SemenTVS
Посмотреть сообщение

поэтому имеется задержка, как я понимаю

Скорее это не задержка, а последовательность действий винда. Когда вы кликаете на файл, то вызывается его приложение, при этом файл ещё не открывается и 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

Цитата
Сообщение от Burk
Посмотреть сообщение

а вот перед запуском приложения заморозить экран не исключено, что возможно, но я этого не знаю

Функция LockWindowUpdate (WinAPI) может, но кто и откуда её будет вызывать ?



1



1813 / 1135 / 346

Регистрация: 11.07.2014

Сообщений: 4,002

20.07.2018, 06:17

7

pashulka, ну так нарисовать скрипт, отрубаем экран, вызываем эксель с загрузкой нужного файла, как параметра. Только после окончания работы приложения не забыть восстановить изменение экрана. И опять же вопрос

Цитата
Сообщение от Burk
Посмотреть сообщение

А стоит ли из-за секунды-двух убиваться?



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 нельзя отменить, поэтому проверьте код в пустой книге или копии существующей книги. Если код не работает, вы можете закрыть книгу без сохранения изменений.

  1. Откройте вкладку Разработчик и щелкните элемент Visual Basic.

    Группа "Код" на вкладке "Разработчик"

  2. В обозревателе VBA Project слева разверните папку VBA Project книги, а затем дважды щелкните модуль ThisWorkbook. Если вы не видите обозреватель Project, перейдите в > Project проводникаили нажмите CTRL+R.

    Модуль ThisWorkbook в редакторе Visual Basic (VBE)

  3. В окне модуля, которое открывается справа, вставьте следующий код:

    Private Sub Workbook_Open()
    
    ' Put your code here
    
    End Sub

  4. В конце и подмножите записи в процедуру Sub.

    Закройте редактор Visual Basic (вам не нужно ничего сохранять).

  5. Сохраните книгу как книгу Excel Macro-Enabled (XLSM)и закроем ее.

При следующем запуске книги код, добавленный в Workbook_Open, будет работать автоматически.

Прежде чем начать, убедитесь, что на ленте доступна вкладка Разработчик. Для этого:

  1. В меню выберите пункт Параметры Excel >… >ленты & панели инструментов.

  2. В категории Настройка ленты в списке Основные вкладки выберите вариант Разработчик.

  3. Нажмите кнопку Сохранить.

Чтобы использовать пример ниже, откройте новую книгу.

Важно: Код VBA нельзя отменить, поэтому проверьте код в пустой книге или копии существующей книги. Если код не работает, вы можете закрыть книгу без сохранения изменений.

  1. Откройте вкладку Разработчик и щелкните элемент Visual Basic.

  2. В обозревателе VBA Project слева разверните папку VBA Project книги, а затем дважды щелкните модуль ThisWorkbook.

  3. В окне модуля, которое открывается справа, вставьте следующий код:

    Private Sub Workbook_Open()
    
    ' Put your code here
    
    End Sub

  4. В конце и подмножите записи в процедуру Sub.

    Закройте редактор Visual Basic (вам не нужно ничего сохранять).

  5. Сохраните книгу как книгу Excel Macro-Enabled (XLSM)и закроем ее.

При следующем запуске книги код, добавленный в Workbook_Open, будет работать автоматически.

 

asesja

Пользователь

Сообщений: 320
Регистрация: 21.10.2019

#1

24.02.2022 23:38:32

Здравствуйте.
Подскажите, пож-та, как сделать так, что-бы при открытии нужного файла Exel *****.xlsm происходил запуск формы с последующим скрытием данной книги. Для дальнейшей работы должна остаться видимой только форма.
Автозапуск формы получается, но следующая строка скрывает все остальные открытые книги Excel, а нужно чтобы скрывалась только эта книга.

Код
Private Sub Workbook_Open()
   UserForm1.Show
   Application.Visible = False
End Sub

Запись ThisWorkbook.Windows(1).Visible = False оставляет пустое окно Excel.  Exel остается видимым, а нужно действие такое же как при исполнении кода Application.Visible = False, только для данного файла. т.е. для простого пользователя при двойном клике должна открыться только форма. Если на момент запуска открыты другие файлы Excel, они не должны быть затронуты.. Если данный файл запускается первым, то тоже должна быть видна только форма, без пустого Excel.

Изменено: asesja25.02.2022 22:21:18

 

Дмитрий(The_Prist) Щербаков

Пользователь

Сообщений: 14182
Регистрация: 15.09.2012

Профессиональная разработка приложений для MS Office

#2

25.02.2022 09:45:17

Цитата
asesja написал:
ThisWorkbook.Windows(1).Visible = False после закрытия меняет файл

так Вы при закрытии формы возвращайте видимость окна и все будет ОК.

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы…

 

Александр Моторин

Пользователь

Сообщений: 958
Регистрация: 31.12.2012

#3

25.02.2022 09:45:56

может так?

Код
Private Sub Workbook_Open()
    Application.Visible = False
    UserForm1.Show
    Application.Visible =true
End Sub
 

Ігор Гончаренко

Пользователь

Сообщений: 13746
Регистрация: 01.01.1970

#4

25.02.2022 10:15:41

1. исправьте:

Код
Private Sub Workbook_Open()
   UserForm1.Show
End Sub

2. Скройте книгу,
3. закройте Excel, на вопрос сохранить — сохраните
4. открывайте, наслаждайтесь

Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!

 

asesja

Пользователь

Сообщений: 320
Регистрация: 21.10.2019

#5

25.02.2022 11:52:53

Цитата
Дмитрий(The_Prist) Щербаков  написал:
при закрытии формы возвращайте видимость окна и все будет ОК.

Подскажите, как? При каком событии формы? Если файл будет открываться первым, то пустой Excel остается видимым, а нужна только форма. Дописал уточнение.

Изменено: asesja25.02.2022 11:59:53

 

asesja

Пользователь

Сообщений: 320
Регистрация: 21.10.2019

#6

25.02.2022 11:53:57

Цитата
Александр Моторин написал:
может так?

Ничего не меняется.

Изменено: asesja25.02.2022 12:00:57

 

asesja

Пользователь

Сообщений: 320
Регистрация: 21.10.2019

#7

25.02.2022 11:58:19

Цитата
Ігор Гончаренко написал:
1. исправьте:Код ? 123Private Sub Workbook_Open()   UserForm1.ShowEnd Sub2. Скройте книгу, 3. закройте Excel, на вопрос сохранить — сохраните4. открывайте, наслаждайтесь

Спасибо. Думал что уже получилось то что хотел, но если файл запускать первым, то на фоне все равно фигурирует пустое окно Excel, а нужно чтобы была видна только форма. Дописал уточнение.

Изменено: asesja25.02.2022 12:01:33

 

Дмитрий(The_Prist) Щербаков

Пользователь

Сообщений: 14182
Регистрация: 15.09.2012

Профессиональная разработка приложений для MS Office

#8

25.02.2022 12:02:23

Цитата
asesja написал:
Если файл будет открываться первым, то пустой Excel остается видимым

так а как Вы хотели-то? Если открыта только одна книга, а Вы и ту скрываете. Да, будет пустое приложение. Определитесь для начала, что при каких условиях должно быть видимым и тогда можно будет решение найти.

Цитата
asesja написал:
а нужно чтобы была видна только форма

а если мы эту книгу открыли не первой? Тогда что?

Цитата
asesja написал:
При каком событии формы?

событие закрытия формы. Есть там такое QueryClose

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы…

 

asesja

Пользователь

Сообщений: 320
Регистрация: 21.10.2019

#9

25.02.2022 12:46:54

Цитата
написал:
Определитесь для начала, что при каких условиях должно быть видимым и тогда можно будет решение найти.

Дмитрий, дописал уточнение в первом сообщении.
Нужно, чтобы всегда была видна только форма при запуске данного файла (форма из этого файла). Если файл открывается первым, то excel не должен быть виден, только форма. Если открытие файла происходит когда уже открыты несколько других файлов, то при открытии тоже должна запускаться только форма, изменение видимости ранее открытых файлов не должно меняться. Т.е. в какой бы момент пользователь не запустил данный файл всегда должна запускаться (быть видна) только форма.
Не знаю как еще объяснить по другому.

 

Jack Famous

Пользователь

Сообщений: 10848
Регистрация: 07.11.2014

OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome

#10

25.02.2022 12:51:29

Цитата
asesja: Т.е. в какой бы момент пользователь не запустил данный файл всегда должна запускаться (быть видна) только форма

засуньте форму в нвдстройку и подключите к Excel — теперь форма всегда будет доступна, никакие дополнительные книги не будут открываться и это очень легко и правильно

Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄

 

asesja

Пользователь

Сообщений: 320
Регистрация: 21.10.2019

#11

25.02.2022 13:11:20

Цитата
написал:
засуньте форму в нвдстройку и подключите к Excel — теперь форма всегда будет доступна, никакие дополнительные книги не будут открываться и это очень легко и правильно

В надстройку не нужно. Нужный мне макрос должен находится в фале и форма должна появляться при его запуске (как будто запускаешь exe в котором при запуске выводится форма)
Если даже поместить в надстройку, то все равно эту форму можно вывести только при открытом excel, а нужно именно при открытии данного файла.
Мне нужно именно как я описал. Может я непонятно объясняю просто?  

 

Ігор Гончаренко

Пользователь

Сообщений: 13746
Регистрация: 01.01.1970

#12

25.02.2022 13:17:41

код в сообщении 4 замените на такой:

Код
Private Sub Workbook_Open()
  Application.Visible = Not (Workbooks.Count = 1 Or _
  (Workbooks.Count = 2 And Workbooks(1).Name = "PERSONAL.XLSB"))
  UserForm1.Show
  Application.Visible = True
  ThisWorkbook.Close False
End Sub

Изменено: Ігор Гончаренко25.02.2022 13:22:34

Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!

 

Дмитрий(The_Prist) Щербаков

Пользователь

Сообщений: 14182
Регистрация: 15.09.2012

Профессиональная разработка приложений для MS Office

#13

25.02.2022 13:27:06

Цитата
asesja написал:
Т.е. в какой бы момент пользователь не запустил данный файл всегда должна запускаться (быть видна) только форма

это никак не вяжется с этим

Цитата
asesja написал:
изменение видимости ранее открытых файлов не должно меняться

Но тем не менее, сделать можно так:

Код
Sub ShowForm()
        Dim lcnt&
    Dim wb As Workbook
    For Each wb In Application.Workbooks
        If wb.Name <> ThisWorkbook.Name Then
            If wb.Windows(1).Visible Then
                lcnt = lcnt + 1
            End If
        End If
    Next
    If lcnt Then 'какие-то книги уже открыты
        ThisWorkbook.Windows(1).Visible = False
        UserForm1.Show
        ThisWorkbook.Windows(1).Visible = True
    Else
        Application.Visible = False
        UserForm1.Show
        Application.Visible = True
    End If
End Sub

осталось понять, что именно делать при закрытии формы — закрывать так же файл или нет.

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы…

 

asesja

Пользователь

Сообщений: 320
Регистрация: 21.10.2019

#14

25.02.2022 13:35:30

Цитата
написал:
код в сообщении 4 замените на такой:

Не работает. Если имеются открытые файлы excel, то при запуске просто моргает окно и закрывается. Если открывать файл первым, то запускается пустой Excel без формы.
На всякий случай уточню, что у меня нет Личной книги макросов, но имеются подключенные надстройки. На разных ПК данная ситуация может отличаться, поэтому нужный макрос будет записан в этом открываемом файле Excel ****.xlsm.

 

asesja

Пользователь

Сообщений: 320
Регистрация: 21.10.2019

#15

25.02.2022 13:37:36

Цитата
написал:
осталось понять, что именно делать при закрытии формы — закрывать так же файл или нет.

Дмитрий, да закрывать. Правильно спросили.

 

RAN

Пользователь

Сообщений: 7091
Регистрация: 21.12.2012

#16

25.02.2022 13:47:16

Код
Private Sub Workbook_Open()
    If Workbooks.Count = 1 Then
        Application.Visible = False
    Else
        Me.Windows(1).Visible = False
    End If
    UserForm1.Show
End Sub
 

Дмитрий(The_Prist) Щербаков

Пользователь

Сообщений: 14182
Регистрация: 15.09.2012

Профессиональная разработка приложений для MS Office

#17

25.02.2022 13:50:52

Цитата
asesja написал:
да закрывать

Т.е. сами по образцу это сделать не сможете, что ли? :)

Код
Sub ShowForm()
    Dim lcnt&
    Dim wb As Workbook
    For Each wb In Application.Workbooks
        If wb.Name <> ThisWorkbook.Name Then
            If wb.Windows(1).Visible Then
                lcnt = lcnt + 1
            End If
        End If
    Next
    
    If lcnt Then 'какие-то книги уже открыты
        ThisWorkbook.Windows(1).Visible = False
        UserForm1.Show
        ThisWorkbook.Windows(1).Visible = True
        ThisWorkbook.Close False 'если надо закрывать без сохранения
    Else
        Application.Visible = False
        UserForm1.Show
        ThisWorkbook.Close False 'если надо закрывать без сохранения
        Application.Quit
    End If
End Sub

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы…

 

asesja

Пользователь

Сообщений: 320
Регистрация: 21.10.2019

#18

25.02.2022 13:51:46

Цитата
написал:
Но тем не менее, сделать можно так:

Дмитрий, не работает. Форма открывается вместе с книгой.

 

Дмитрий(The_Prist) Щербаков

Пользователь

Сообщений: 14182
Регистрация: 15.09.2012

Профессиональная разработка приложений для MS Office

#19

25.02.2022 13:54:07

Цитата
asesja написал:
Форма открывается вместе с книгой

с какой именно? Куда и на какое событие вставляли код? Чего от кода ожидаете?
Я лично все проверил — если есть хоть одна открытая книга — то книга с кодом скрывается, остальные остаются видимыми, поверх появляется форма. Если открывается только книга с кодом и нет других видимых книг — то появляется только форма, а Excel полностью скрывается.
А если по сути вопроса — да, форма всегда будет открываться вместе с книгой, т.к. форма внедрена в книгу, она её часть и без книги открываться просто не может по определению.

Изменено: Дмитрий(The_Prist) Щербаков25.02.2022 13:55:30

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы…

 

asesja

Пользователь

Сообщений: 320
Регистрация: 21.10.2019

#20

25.02.2022 14:01:10

Цитата
написал:
RAN

Ран, почти то, что нужно, но если открыть первым файл с макросом, то затем любой следующий открытый файл Excel делает видимым Excel у которого форма.
И как задал вопрос Дмитрий Щербаков, хорошо бы при закрытии формы закрывать и саму книгу.

 

Дмитрий(The_Prist) Щербаков

Пользователь

Сообщений: 14182
Регистрация: 15.09.2012

Профессиональная разработка приложений для MS Office

#21

25.02.2022 14:03:34

Цитата
asesja написал:
если открыть первым файл с макросом, то затем любой следующий открытый файл Excel делает видимым Excel у которого форма

так в условии не было ни слова о том, что надо отслеживать еще и последующие открываемые файлы! Вы сами понимаете, что одним кодом это действие не отследить? Надо писать обработку класса на отслеживание событий приложения, чтобы проверять — если форма открыта, то одно, если нет, то другое…
Плюс вопрос — а как же люди при открытой форме у Вас файлы-то открывают? У меня почему-то не получается. Вопрос на засыпку — форма в модальном режиме открывается или ShowModal = False? Если режим модальный — то даже если файл будет открыт, то показан он будет исключительно после закрытия формы.
В общем — принцип основной вроде бы показан и далеко не в единственном варианте, а под все остальные свои условия постарайтесь написать хоть что-то сами. А когда все условия будут обдуманы, проверены и испытаны, но решение так и не будет найдено — милости просим. А то что-то получается, что мы тут должны угадывать что Вы там еще делаете внутри формы, до запуска, во время работы с формой и после и какие еще условия сопутствуют всему этому(не говорю уже про то, что никто не понимает конечной цели этой все задумки).

Изменено: Дмитрий(The_Prist) Щербаков25.02.2022 14:12:57

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы…

 

Jack Famous

Пользователь

Сообщений: 10848
Регистрация: 07.11.2014

OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome

От вам не лень, ей богу  :D

Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄

 

asesja

Пользователь

Сообщений: 320
Регистрация: 21.10.2019

#23

25.02.2022 14:13:56

Цитата
написал:
Т.е. сами по образцу это сделать не сможете, что ли?

Дмитрий, извините, но просто моргает и закрывается.

Наверное буду решать вопрос как-то по другому, если нельзя сделать так, как я спросил.
Спасибо.

Изменено: asesja25.02.2022 14:16:53

 

Дмитрий(The_Prist) Щербаков

Пользователь

Сообщений: 14182
Регистрация: 15.09.2012

Профессиональная разработка приложений для MS Office

#24

25.02.2022 14:19:01

Цитата
asesja написал:
просто моргает и закрывается

не знаю, что у Вас там происходит. Информации мало — нужно точно знать, установлено ли свойство формы ShowModal в true. Если нет — то  так и будет моргать и закрываться, т.к. в этом случае форма запускается и не происходит ожидания её закрытия и код идет дальше — следовательно книга просто закрывается.

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы…

 

asesja

Пользователь

Сообщений: 320
Регистрация: 21.10.2019

#25

25.02.2022 14:19:55

Цитата
написал:
форма в модальном режиме открывается или ShowModal = False?

Дмитрий, ShowModal = False. Если true, то работа с другими файлами не возможна, как вы и написали.

Изменено: asesja25.02.2022 14:24:45

 

Дмитрий(The_Prist) Щербаков

Пользователь

Сообщений: 14182
Регистрация: 15.09.2012

Профессиональная разработка приложений для MS Office

#26

25.02.2022 14:21:09

Цитата
asesja написал:
ShowModal = False?

это вопрос о чем? Краткость не всегда сестра таланта. Я вроде выше все расписал.

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы…

 

пора автору дать возможность помедитировать, подумать над задачей….
глядишь — и сформулирует что-то внятное
как говорится, вечно можно смотреть на 3 вещи:
— как горит огонь
— как течет вода
— и как завсегдатаи форума пытаются угадать, что нужно автору вопроса

Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!

 

asesja

Пользователь

Сообщений: 320
Регистрация: 21.10.2019

#28

25.02.2022 14:25:24

Цитата
написал:
это вопрос о чем?

Дмитрий, исправил.

 

Дмитрий(The_Prist) Щербаков

Пользователь

Сообщений: 14182
Регистрация: 15.09.2012

Профессиональная разработка приложений для MS Office

#29

25.02.2022 14:31:18

Цитата
asesja написал:
Дмитрий, исправил

ну так это у Вас проблемы с базовым пониманием принципов работы с формами. Я уже выше пояснил — если работаете с формой в немодальном режиме — то вот эти строки:

Цитата
Дмитрий(The_Prist) Щербаков написал:
ThisWorkbook.Windows(1).Visible = False
UserForm1.Show
ThisWorkbook.Windows(1).Visible = True
ThisWorkbook.Close False ‘если надо закрывать без сохранения

выполняются сразу без остановок.
Следовательно, читаем тему выше, где я писал какое событие формы надо использовать для обработки закрытия формы

Цитата
Дмитрий(The_Prist) Щербаков написал:
событие закрытия формы. Есть там такое QueryClose

и продумывать логику действий исходя из всех условий(открытие файлов в процессе работы с формой и поведение приложения и формы в этих случаях).

Изменено: Дмитрий(The_Prist) Щербаков25.02.2022 14:32:06

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы…

 

asesja

Пользователь

Сообщений: 320
Регистрация: 21.10.2019

#30

25.02.2022 14:47:19

Спасибо, всем, кто отозвался. Все правы, что задача сформулирована не полностью.
Так получается, когда одно цепляется за другое по мере прохождения определенного этапа и апробации предложенных вариантов. Изначально не всегда думаешь, что при выполнении какого либо действия, возымевшего положительный, или частично положительный, результат, вытекает другие обстоятельства, о которых до этого не думал, т.к. вообще не о чем было подумать (ничего не получалось и результата не было).

Формулировка после получения и апробации предложенных вариантов:
При запуске имеющегося файла с формой(макросом) ***.xlsm необходимо, чтобы запускалась (была видна) только форма UserForm1, независимо первым данный файл будет запущен или уже после того, когда имеются открытые книги. Если запускается первым, то открытие других файлов Excel не должно делать видимым эту книгу (в которой форма).  Форама не модальная. На ней будут размещены различные элементы управления для своих задач.
При закрытии формы её книга тоже должна закрываться.
Дополнительно: на моем ПК имеются подключенные надстройки и отсутствует Личная книга макросов, но эти данные не должны влиять, на ход выполнения задачи, т.к. на различных ПК могут отличаться.

Изменено: asesja25.02.2022 22:33:11

Узнай цену своей работы

Формулировка задачи:

Подскажите как сделать так что бы при открытии файла excel сразу же вылазила форма (и не давала работать пока ее не закроешь)

Код к задаче: «Автозапуск userforms (пользовательской формы)»

textual

Листинг программы

Private Sub Workbook_Open()
   UserForm1.Show vbModal
End Sub

Полезно ли:

9   голосов , оценка 4.111 из 5

Похожие ответы

  1. Размер пользовательской формы
  2. Расположение пользовательской формы на экране
  3. Общий обработчик событий CheckBox на листе Excel (не форме)
  4. Сравнения значений столбца с полем формы
  5. Gif анимация на форме vba
  6. Удаление созданного файла jpg, из которого скопирована картинка в форму
  7. Событие-закрыл форму
  8. Ввод данных в таблицу с формы
  9. VBA EXCEL, как открыть форму с названием, выбранном из другой формы
  10. Управление формами
  11. Progressbar в форме

Содержание

  1. Заставка при открытии книги Excel
  2. Шаг 1. Создаем экранную форму
  3. Шаг 2. Добавляем управляющий код
  4. Как это работает?
  5. Ссылки по теме
  6. VBA Excel. Первая форма (для начинающих)
  7. Создание пользовательской формы
  8. Добавление элементов управления
  9. Отображение формы на экране
  10. Автоматический запуск макроса при открытии книги
  11. Дополнительные сведения
  12. Работа с пользовательскими формами в VBA
  13. Вставка новой формы UserForm
  14. Добавление элементов управления в пользовательское диалоговое окно
  15. Элементы управления в окне Toolbox
  16. Использование элементов управления на рабочем листе
  17. Настройка элементов управления пользовательского диалогового окна
  18. Изменение свойств элементов управления
  19. Отображение пользовательского диалогового окна

Заставка при открытии книги 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, примеры в формате архива

Стандартная последовательность шагов при этом следующая:

  1. Вставьте новую форму UserForm в проект VBAProject рабочей книги.
  2. Добавьте элементы управления в форму UserForm.
  3. Настройте свойства добавленных элементов управления.
  4. Создайте процедуры «обработчики событий» для элементов управления. Эти процедуры добавляются в модуль кода UserForm и выполняются при возникновении различных событий (например, при щелчке на кнопке).
  5. Разработайте процедуру, которая отображает форму UserForm. Эта процедура находится в модуле VBA (а не в модуле кода для формы UserForm).
  6. Определите простой способ вызова на выполнение процедуры, созданной в п. 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:

Источник

Понравилась статья? Поделить с друзьями:

А вот еще интересные статьи:

  • Автозапуск excel по времени
  • Автозаполняемая форма в excel
  • Автозаполнение ячейки с выпадающим списком excel
  • Автозаполнение ячейки по первым буквам в excel
  • Автозаполнение ячейки в word

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии