Заставка при запуске excel vba

Этот прием позволит Вам выводить на экран окно-заставку при открытии любой заданной книги в Excel.

splash.png

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

Шаг 1. Создаем экранную форму

Откройте редактор Visual Basic — в старых версиях Excel это можно сделать через меню Сервис — Макрос — Редактор Visual Basic (Tools — Macro — Visual Basic Editor), а в новых кнопкой Visual Basic на вкладке Разработчик (Developer) и создайте новую форму, используя команду меню Insert — UserForm. Появится пустая серая оконная форма будущей заставки. Добавим на нее изображение при помощи панели инструментов Toolbox (если у вас ее не видно, то зайдите в меню View — Toolbox):

splash2.jpg

Нажмите кнопку Image и растяните на форме прямоугольник — в него будет помещено фоновое изображение. Затем на панели инструментов Properties (если у вас ее не видно, то выберите в меню View — Properties) задайте выберите файл картинки в поле Picture:

splash3.gif

Возможно, придется немного изменить размер формы, чтобы изображение уместилось полностью. Чтобы написать на форме текст, можно использовать элемент управления Label с панели Toolbox.

Ну, и наконец, выделив предварительно всю форму, можно задать текст в строке заголовка, используя свойство Caption в панели Properties:

splash4.gif

В итоге у вас должно получиться нечто подобное:

splash5.jpg

Шаг 2. Добавляем управляющий код

Щелкните правой кнопкой мыши по форме и выберите View Code. В открывшийся модуль формы добавьте такой код:

 
Private Sub UserForm_Activate() 
   Application.OnTime Now + TimeValue("00:00:05"), "KillTheForm" 
End Sub

Откройте модуль ЭтаКнига в левом верхнем углу (если ее не видно — отобразите соответствующее окно через меню View — Project Explorer) и добавьте в него следующий код:

 
Private Sub Workbook_Open() 
   UserForm1.Show 
End Sub
 

И, наконец, вставьте обычный модуль (Insert — Module) и скопируйте туда это:

 
Private Sub KillTheForm() 
   Unload UserForm1 
End Sub 

Все. Можно закрывать редактор Visual Basic, сохранять файл и пробовать закрыть-открыть книгу…

Как это работает?

При открытии книги Excel выполняет процедуру Workbook_Open из модуля ЭтаКнига. Эта процедура отображает на экране нашу форму-заставку. При отображении формы запускается процедура UserForm_Activate, которая с задержкой в 5 секунд запускает макрос KillTheForm, который убирает форму с экрана.

Ссылки по теме

  • Что такое макросы, как с ними работать, куда вставлять код на Visual Basic

Ранее я рассмотрел методы создания пользовательских форм и основы работы с ними (если вы никогда не работали с пользовательскими формами, рекомендую для начала прочитать указанную заметку). В настоящем материале приводится целый ряд практически полезных примеров пользовательских диалоговых окон.[1]

Рис. 1. Меню на основе элементов управления CommandButton или ListBox

Скачать заметку в формате Word или pdf, примеры в архиве

Создание меню

Меню можно создать с помощью элементов управления CommandButton (рис. 1; см. файл userform menus.xlsm) и с помощью элемента управления ListBox. Каждый элемент управления CommandButton имеет собственную процедуру обработки событий. Например, представленная ниже процедура выполняется после щелчка на кнопке CommandButton1:

Private Sub CommandButton1_Click()

    Me.Hide

    Call Macro1

    Unload Me

End Sub

Эта процедура приводит к вызову макроса Macro1 и закрытию диалогового окна UserForm. После щелчка на других кнопках (отличных от CommandButton1) вызываются похожие процедуры обработки событий.

В случае использования элемента управления ListBox, перед отображением пользовательского диалогового окна вызывается процедура обработки события Initialize. В следующей процедуре используется метод Addltem для добавления шести опций в элемент управления ListBox:

Private Sub UserForm_Initialize()

    With ListBox1

        .AddItem «Макрос1»

        .AddItem «Макрос2»

        .AddItem «Макрос3»

        .AddItem «Макрос4»

        .AddItem «Макрос5»

        .AddItem «Макрос6»

    End With

End Sub

Процедура обработки события привязывается к кнопке Выполнить:

Private Sub ExecuteButton_Click()

    Select Case ListBox1.ListIndex

        Case 1

            MsgBox «Выберите макрос из списка.»

            Exit Sub

        Case 0: Me.Hide: Call Macro1

        Case 1: Me.Hide: Call Macro2

        Case 2: Me.Hide: Call Macro3

        Case 3: Me.Hide: Call Macro4

        Case 4: Me.Hide: Call Macro5

        Case 5: Me.Hide: Call Macro6

    End Select

    Unload Me

End Sub

Данная процедура проверяет значение свойства Listlndex элемента управления ListBox, чтобы определить, какой элемент выбран в списке (если свойство Listlndex равно –1, то не выбран ни один из элементов). После этого запускается соответствующий макрос.

Выбор диапазона в пользовательской форме

Некоторые встроенные диалоговые окна Excel предоставляют пользователю возможность выбирать диапазон. Например, диалоговое окно Подбор параметра, для вызова которого следует пройти по меню Данные –> Работа с данными –> Анализ «что если « –> Подбор параметра, запрашивает у пользователя два диапазона. Пользователь может или ввести имя диапазона непосредственно в окне, или применить мышь для выделения диапазона на листе.

Пользовательское диалоговое окно также обеспечивает подобную функциональность. Это достигается с помощью элемента управления RefEdit. Данный элемент выглядит иначе, чем элемент выбора диапазона во встроенных диалоговых окнах Excel, однако работает точно так же. Если пользователь щелкнет на небольшой кнопке в правой части элемента управления, то диалоговое окно временно исчезнет, а на экране будет отображен небольшой указатель выбора диапазона.

К сожалению, элемент управления RefEdit не позволяет использовать специальные клавиши при выделении диапазона (например, невозможно выделить ячейки до конца столбца, нажав комбинацию клавиш Shift+↓). Кроме того, после щелчка мышью на маленькой кнопке в правой части элемента управления (для временного сокрытия диалогового окна) можно применять только выделения с помощью мыши. Клавиатуру в этом случае применять нельзя.

На рис. 2 представлено пользовательское диалоговое окно с добавленным элементом управления RefEdit (см. файл range selection demo.xlsm). Это диалоговое окно выполняет простую математическую операцию над всеми не содержащими формул и непустыми ячейками указанного диапазона. Выполняемая операция задается активным переключателем OptionButton.

Рис. 2. С помощью элемента управления RefEdit можно выбрать диапазон

Элемент управления RefEdit возвращает текстовую строку, которая представляет выбранный диапазон. Можно преобразовать эту строку в объект Range. Для этого используется оператор:

Set UserRange = Range(RefEditl.Text)

Удачной практикой считается инициализация элемента управления RefEdit для представления текущего выделения. Для этого в процедуре UserForm_Initialize воспользуйтесь оператором:

RefEditl.Text = ActiveWindow.RangeSelection.Address

Для достижения наилучших результатов не помещайте элемент управления RefEdit внутри элемента Frame либо MultiPage. Это может привести к сбою в работе Excel. Элемент управления RefEdit не всегда возвращает действительный диапазон. Выделение диапазона указателем мыши — это один из способов присвоения значения данному элементу управления. Пользователь может ввести в поле любой текст, а также отредактировать или удалить уже отображаемый текст. Таким образом, предварительно необходимо убедиться, что диапазон является допустимым.

Следующий код — это пример одного из способов проверки допустимости введенного значения. Если определено, что значение неправильное, то пользователю выдается сообщение, а элемент управления RefEdit становится активным, предоставляя возможность ввести корректный диапазон.

    On Error Resume Next

    Set UserRange = Range(RefEdit1.Text)

    If Err <> 0 Then

        MsgBox «Выбран некорректный диапазон»

        RefEdit1.SetFocus

        Exit Sub

    End If

    On Error GoTo 0

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

Set OneCell = Range(RefEditl.Text).Range("Al")

Создание заставки

Некоторые разработчики предпочитают отображать определенную вступительную информацию при запуске приложения. Эта методика называется заставкой. Без сомнения, все пользователи видели заставку Excel, которая отображается несколько секунд при запуске программы. В приложении Excel заставку можно создать с помощью пользовательского диалогового окна. В приведенном ниже примере реализуется автоматическое отображение заставки, которое исчезает по истечении пяти секунд (рис. 3; см. файл splash screen.xlsm). Для создания заставки выполните следующие действия:

  1. Создайте рабочую книгу.
  2. Активизируйте редактор VBE и вставьте пользовательское диалоговое окно в проект. Код в этом примере предполагает, что объект UserForm называется UserForm1.
  3. Поместите любые необходимые элементы управления в только что созданное диалоговое окно UserForm1. Например, вам может понадобиться расположить элемент управления Image, который будет содержать логотип компании (рис. 3).
  4. Вставьте процедуру в модуль кода для объекта ЭтаКнига (ThisWorkbook):

Private Sub Workbook_Open()

    UserForm1.Show

End Sub

  1. Вставьте следующую процедуру в модуль кода для объекта UserForm1 (эта процедура обеспечивает пятисекундную задержку). Если нужно другое время задержки, измените значение аргумента функции TimeValue.

Private Sub UserForm_Activate()

    Application.OnTime Now + TimeValue(«00:00:05»), «KillTheForm»

End Sub

Рис. 3. Эта заставка на короткое время появляется на экране после открытия рабочей книги

  1. В общий модуль VBA вставьте следующую процедуру.

Private Sub KillTheForm()

    Unload UserForm1

End Sub

При открытии рабочей книги будет выполнена процедура Workbook_Open и появится диалоговое окно UserForm (п. 4). В этот момент генерируется событие Activate, которое приводит к выполнению процедуры UserForm_ Activate (п. 5). Данная процедура использует метод OnTime объекта Application для выполнения процедуры KillTheForm в определенный момент времени. Однако предварительно определена задержка в пять секунд с момента возникновения события Activate. Процедура KillTheForm просто выгружает диалоговое окно UserForm из памяти.

  1. В качестве необязательного действия можно добавить элемент управления CommandButton с именем CancelButton, установить его свойство Cancel равным True и добавить представленную ниже процедуру обработки события в модуль кода формы UserForm.

Private Sub CancelButton_Click()

    Unload Me

End Sub

Таким образом, пользователь сможет закрыть заставку, прежде чем пройдет указанное время задержки. Окно будет закрыто также в результате нажатия клавиши <Esc>. Эту небольшую кнопку можно разместить за другим объектом, чтобы она не была видна.

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

Для того чтобы выполнить VBA-процедуру при открытии документа, нужно так отобразить пользовательское диалоговое окно в немодальном режиме, чтобы код продолжал выполняться. Для этого измените процедуру WorkbookOpen следующим образом.

Private Sub Workbook_Open()

    UserForml.Show vbModeless

     другой код

End Sub

Отключение кнопки закрытия пользовательского диалогового окна

Если пользовательское диалоговое окно уже отображено на экране, щелчок на кнопке Закрыть в правом верхнем углу приведет к выгрузке формы UserForm из памяти. Иногда этого допускать нельзя. Например, иногда требуется, чтобы диалоговое окно UserForm закрывалось только после щелчка на специальной кнопке CommandButton. Несмотря на то что реально отключить кнопку Закрыть невозможно, вы вправе предотвратить закрытие диалогового окна, вызванное щелчком на этой кнопке. Для этого воспользуйтесь обработчиком события QueryClose (см. файл gueryclose demo.xlsm). Следующая процедура, которая расположена в модуле кода диалогового окна UserForm, выполняется перед закрытием формы (т.е. в момент возникновения события QueryClose).

Private Sub UserForm_QueryClose _

  (Cancel As Integer, CloseMode As Integer)

    If CloseMode = vbFormControlMenu Then

        MsgBox «Щелкните на кнопке OK для закрытия формы.»

        Cancel = True

    End If

End Sub

Процедура UserForm_QueryClose использует два аргумента. Аргумент CloseMode содержит значение, которое указывает на причину возникновения события QueryClose. Если значение аргумента CloseMode равно vbFormControlMenu (встроенная константа), значит, пользователь щелкнул на кнопке Закрыть. В таком случае будет отображено сообщение (рис. 4); аргумент Cancel устанавливается равным True, и форма не закрывается.

Рис. 4. Процедура перехватывает закрытие окна, и оставляет его открытым

Имейте в виду, что пользователь может нажать клавиши <Ctrl+Break>, прекратив тем самым выполнение макроса. В рассматриваемом примере нажатие клавиш <Ctrl+Break> во время отображения формы UserForm на экране приведет к тому, что пользовательское диалоговое окно будет закрыто. Во избежание этого выполните следующий оператор до отображения пользовательского диалогового окна:

Application.EnableCancelKey = xlDisabled

Прежде чем добавить этот оператор, удостоверьтесь, что в приложении нет ошибок. В противном случае возникает опасность формирования бесконечного цикла.

Изменение размера диалогового окна

Во многих приложениях используются окна, которые могут изменять собственные размеры, добавляя кнопки и опции. Например, высота диалогового окна Excel Найти и заменить, которое отображается после выбора команды Главная –> Редактирование –> Найти и выделить –> Заменить, увеличивается после щелчка на кнопке Параметры.

Изменение размеров пользовательского диалогового окна осуществляется путем изменения значений свойств Width и Height объекта UserForm. На рис. 5а показано первоначальное диалоговое окно, а на рис. 5б показано это же окно после щелчка на кнопке Параметры. Обратите внимание на то, что надпись на кнопке изменяется в зависимости от размера диалогового окна (см. файл change userform size.xlsm).

Рис. 5. Диалоговое окно: вверху – в стандартном режиме; внизу – после нажатия на кнопке Параметры

Создавая пользовательское диалоговое окно, определите его максимальный размер, чтобы получить доступ ко всем элементам управления. После этого воспользуйтесь процедурой UserForm_Initialize для установки размеров диалогового окна по умолчанию.

В коде применяются две константы, определенные в верхней части модуля.

Const SmallSize As Integer = 124
Const LargeSize As Integer = 164

Пример предназначен для печати рабочих листов активной книги. Он позволяет пользователю указать листы, которые необходимо распечатать. Ниже приведена процедура обработки события, которая выполняется после щелчка на кнопке Параметры.

Private Sub OptionsButton_Click()

    If OptionsButton.Caption = «Параметры >>» Then

        Me.Height = LargeSize

        OptionsButton.Caption = «<< Параметры»

    Else

        Me.Height = SmallSize

        OptionsButton.Caption = «Параметры >>»

    End If

End Sub

Эта процедура проверяет значение свойства Caption объекта CommandButton и устанавливает значение свойства Height объекта UserForm в соответствии с полученным значением свойства Caption.

Если элементы управления не отображаются из-за того, что находятся за пределами границы диалогового окна, соответствующие этим элементам управления комбинации клавиш будут продолжать функционировать. В рассматриваемом примере пользователь может нажать клавиши <Alt+L> (для выбора альбомной ориентации страницы), даже если соответствующий элемент управления не отображается на экране.

Масштабирование и прокрутка листа в пользовательском диалоговом окне

Для прокрутки и масштабирования листа при активном диалоговом окне можно применить элемент управления ScrollBar (рис. 6; см. файл zoom and scroll sheet.xlsm). В этом примере масштаб можно изменять в диапазоне от 100 до 400%. Два элемента управления ScrollBar в нижней части диалогового окна позволяют прокручивать лист по горизонтали и по вертикали.

Рис. 6. Элементы управления ScrollBar позволяют прокручивать лист и изменять его масштаб

Элементы управления инициализируются в процедуре UserForm_Initialize:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

Private Sub UserForm_Initialize()

    LabelZoom.Caption = ActiveWindow.Zoom & «%»

‘   Масштабирование

    With ScrollBarZoom

        .Min = 10

        .Max = 400

        .SmallChange = 1

        .LargeChange = 10

        .Value = ActiveWindow.Zoom

    End With

   Прокрутка по горизонтали

    With ScrollBarColumns

        .Min = 1

        .Max = ActiveSheet.UsedRange.Columns.Count

        .Value = ActiveWindow.ScrollColumn

        .LargeChange = 25

        .SmallChange = 1

    End With

   Прокрутка по вертикали

    With ScrollBarRows

        .Min = 1

        .Max = ActiveSheet.UsedRange.Rows.Count

        .Value = ActiveWindow.ScrollRow

        .LargeChange = 25

        .SmallChange = 1

    End With

End Sub

Эта процедура позволяет устанавливать значения различных свойств элементов управления ScrollBar. Значения определяются на основе данных, полученных из активного окна. При использовании элемента управления ScrollBarZoom выполняется процедура ScrollBarZoom_Change. Она устанавливает значение свойства Zoom объекта ActiveWindow равным значению свойства Value элемента управления ScrollBar. Кроме того, изменяется текст подписи, которая представляет текущий масштаб рабочего листа.

Private Sub ScrollBarZoom_Change()

    With ActiveWindow

        .Zoom = ScrollBarZoom.Value

        LabelZoom = .Zoom & «%»

        .ScrollColumn = ScrollBarColumns.Value

        .ScrollRow = ScrollBarRows.Value

    End With

End Sub

Прокрутка листа осуществляется с помощью двух процедур. Эти процедуры устанавливают значение свойств ScrollRow и ScrollColumns объекта ActiveWindow равными значениям свойств Value элементов управления ScrollBar.

Private Sub ScrollBarColumns_Change()

    ActiveWindow.ScrollColumn = ScrollBarColumns.Value

End Sub

Private Sub ScrollBarRows_Change()

    ActiveWindow.ScrollRow = ScrollBarRows.Value

End Sub

При нажатии на кнопку Ok пользовательская форма закрывается:

Private Sub OKButton_Click()

    Unload Me

End Sub

Применение элемента управления MultiPage

Элемент управления MultiPage применяется при отображении в пользовательских диалоговых окнах множества элементов управления. Элемент управления MultiPage позволяет группировать опции, а также размещать каждую группу на отдельной вкладке (рис. 7; см. файл multipage control demo.xlsm). Панель инструментов Toolbox также включает элемент управления TabStrip, напоминающий элемент управления MultiPage. Однако в отличие от MultiPage, элемент управления TabStrip не может включать другие объекты. Поскольку элемент управления MultiPage является более гибким, вряд ли вам придется обращаться к элементу управления TabStrip.

Рис. 7. Элемент управления MultiPage группирует элементы управления на страницах, доступ к которым обеспечивается с вкладки

Вкладка (или страница), которая отображается поверх всех остальных, определяется значением свойства Value элемента управления MultiPage. Значение 0 соответствует первой вкладке. Значение 1 вызывает отображение второй вкладки и т.д. По умолчанию элемент управления MultiPage состоит из двух страниц. Для того чтобы добавить дополнительные вкладки, щелкните на любой вкладке правой кнопкой мыши и в контекстном меню выберите пункт New Page.

При работе с элементом управления MultiPage щелкните на вкладке, чтобы установить свойства страницы. В окне Properties отобразятся свойства, значения которых можно изменить. Иногда сложно выделить сам элемент управления MultiPage, так как щелчок на нем приводит к выделению страницы элемента управления. Для того чтобы выделить только элемент управления, щелкните на его границе. Кроме того, можете воспользоваться клавишей <Таb> для циклического перемещения между элементами управления. Еще одним вариантом выделения элемента управления является выбор пункта MultiPage из раскрывающегося списка окна Properties.

Если элемент управления MultiPage содержит много вкладок, то присвойте его свойству MultiRow значение True, чтобы отобразить вкладки в несколько строк. Если необходимо, то вместо вкладок можно отображать кнопки. Достаточно изменить значение свойства Style на 1. Если значение свойства Style равно 2, элемент управления MultiPage не будет отображать ни вкладки, ни кнопки.

Свойство TabOrientation определяет расположение вкладок на элементе управления MultiPage. Для каждой страницы можно установить эффект перехода. Для этого воспользуйтесь свойством TransitionEffect. Например, щелчок на вкладке приведет к тому, что новая страница «отодвинет» старую. Применяйте свойство TransitionPeriod, чтобы задать скорость эффекта перехода.

Использование внешних элементов управления

Пример, рассматриваемый в этом разделе, основан на элементе управления Microsoft Windows Media Player. Несмотря на то что он не является элементом управления Excel (настраивается при установке Windows), он прекрасно работает с формами UserForm. Для того чтобы воспользоваться элементом управления Microsoft Windows Media Player выполните следующие действия:

  1. Активизируйте среду VBE.
  2. Создайте новую пользовательскую форму: Insert –> UserForm.
  3. Щелкните правой кнопкой мыши на панели Toolbox и в контекстном меню выберите параметр Additional Controls (Дополнительные элементы управления). Если окно Toolbox не отображается, выполните команду View –> Toolbox.
  4. В окне Additional Controls установите флажок Windows Media Player (рис. 8).
  5. Щелкните на кнопке ОК. Набор инструментов пополнится новым элементом управления.

Рис. 8. Подключение элемента управления Microsoft Windows Media Player

На рис. 9 показаны элемент управления Windows Media Player, встроенный в форму UserForm, а также окно Properties (см. также файл mediaplayer.xlsm, расположенный в отдельной папке). Свойство URL определяет URL-ссылку воспроизводимой композиции (музыкальная запись или видеоролик). Если композиция находится на жестком диске вашего компьютера, свойство URL определяет полный путь и имя соответствующего файла.

Рис. 9. Элемент управления Windows Media Player, встроенный в форму

На рис. 10 показан пример использования этого элемента управления. Для сокрытия окна, предназначенного для отображения видеороликов, была уменьшена высота окна элемента управления Windows Media Player. Также был добавлен список, созданный на основе элемента управления ListBox, в котором отображаются аудиофайлы MP3. После щелчка на кнопке Пуск начинается воспроизведение выбранного файла. Щелчок на кнопке Закрыть приведет к прекращению воспроизведения и к закрытию окна UserForm. Форма UserForm отображается в немодальном режиме, поэтому можно продолжать работу во время отображения диалогового окна.

Рис. 10. Элемент управления Windows Media Player в действии

Названия МРЗ-файлов в окне списка отображаются с помощью процедуры UserForm_Initialize. В целях упрощения алгоритма аудофайлы находятся в той же папке, что и рабочая книга. Можно реализовать и более гибкий подход, предусматривающий выбор пользователем папки, содержащей требуемые аудиофайлы.

Private Sub UserForm_Initialize()

    Dim FileName As String

   Заполнение списка MP3файлами

    FileName = Dir(ThisWorkbook.Path & «*.mp3», vbNormal)

    Do While Len(FileName) > 0

        ListBox1.AddItem FileName

        FileName = Dir()

    Loop

    ListBox1.ListIndex = 0

End Sub

Код обработчика событий PlayButton_Click включает единственный оператор, который присваивает выбранное имя файла свойству URL объекта WindowsMediaPlayer1.

Private Sub PlayButton_Click()

   Свойство URL загружает трек и запускает плеер

    WindowsMediaPlayer1.URL = _

      ThisWorkbook.Path & «« & ListBox1.List(ListBox1.ListIndex)

End Sub

Анимация элемента управления Label

Форма UserForm (рис. 11) представляет собой интерактивный генератор случайных чисел. Два элемента управления TextBox содержат верхнее и нижнее значения для случайного числа. Элемент управления Label изначально отображает четыре знака вопроса, а после щелчка мышью на кнопке Пуск отображаются анимированные случайные числа. При этом кнопка Пуск превращается в кнопку Остановить, а щелчок на ней мышью приводит к прекращению анимации и отображению случайного числа. Код, связанный с кнопкой генератора случайных чисел можно найти в модуле UserForm1 файла random number generator.xlsm.

Рис. 11. Генератор случайных чисел

Поскольку кнопка выполняет две функции (запуск и остановка анимации), в процедуре используется общедоступная переменная Stopped, с помощью которой отслеживается состояние кнопки. Первая часть процедуры состоит из двух структур If-Then, с помощью которых проверяется содержимое элементов управления TextBox. Два другая подобных оператора позволяют удостовериться в том, что меньшая величина действительно не превосходит большей величины. В следующем разделе кода осуществляется настройка размера шрифта элемента управления Label на основании максимальной величины. Цикл Do Until loop генерирует и отображает случайные числа. Обратите внимание на оператор DoEvents. Он позволяет Excel использовать все возможности операционной системы. Если бы его не было, элемент управления Label не смог бы отобразить каждое генерируемое случайное число. Другими словами, именно оператор DoEvents делает возможной анимацию.

Форма UserForm также включает элемент управления CommandButton, который выполняет функции кнопки Отмена. Этот элемент управления находится за пределами окна UserForm, поэтому невидим. Свойству Cancel элемента управления CommandButton присвоено значение True. Вследствие этого нажатие клавиши <Esc> дает тот же эффект, что и щелчок на кнопке Отмена. Соответствующая процедура обработки событий присваивает переменной Stopped значение True и выгружает форму UserForm.

[1] По материалам книги Джон Уокенбах. Excel 2010. Профессиональное программирование на VBA. – М: Диалектика, 2013. – С. 439–449, 466–472.

Оглавление:

  • 1 Как сделать заставку в excel? — Разбираем подробно
    • 1.1 Шаг 1. Создаем экранную форму
    • 1.2 Шаг 2. Добавляем управляющий код
    • 1.3 Как это работает?
    • 1.4 Ссылки по теме
    • 1.5 Создание меню
    • 1.6 Выбор диапазона в пользовательской форме
    • 1.7 Создание заставки
    • 1.8 Отключение кнопки закрытия пользовательского диалогового окна
    • 1.9 Изменение размера диалогового окна
    • 1.10 Масштабирование и прокрутка листа в пользовательском диалоговом окне
    • 1.11 Применение элемента управления MultiPage
    • 1.12 Использование внешних элементов управления
    • 1.13 Анимация элемента управления Label

Этот прием позволит Вам выводить на экран окно-заставку при открытии любой заданной книги в Excel.

Как сделать заставку в excel?

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

Шаг 1. Создаем экранную форму

Откройте редактор Visual Basic — в старых версиях Excel это можно сделать через меню Сервис — Макрос — Редактор Visual Basic (Tools — Macro — Visual Basic Editor), а в новых кнопкой Visual Basic на вкладке Разработчик (Developer) и создайте новую форму, используя команду меню Insert — UserForm. Появится пустая серая оконная форма будущей заставки. Добавим на нее изображение при помощи панели инструментов Toolbox (если у вас ее не видно, то зайдите в меню View — Toolbox):

Как сделать заставку в excel?

Нажмите кнопку Image и растяните на форме прямоугольник — в него будет помещено фоновое изображение. Затем на панели инструментов Properties (если у вас ее не видно, то выберите в меню View — Properties) задайте выберите файл картинки в поле Picture:

Возможно, придется немного изменить размер формы, чтобы изображение уместилось полностью. Чтобы написать на форме текст, можно использовать элемент управления Label с панели Toolbox.

Ну, и наконец, выделив предварительно всю форму, можно задать текст в строке заголовка, используя свойство Caption в панели Properties:

В итоге у вас должно получиться нечто подобное:

Как сделать заставку в excel?

Шаг 2. Добавляем управляющий код

Щелкните правой кнопкой мыши по форме и выберите View Code. В открывшийся модуль формы добавьте такой код:

   Private Sub UserForm_Activate()      Application.OnTime Now + TimeValue("00:00:05"), "KillTheForm"   End Sub

Откройте модуль ЭтаКнига в левом верхнем углу (если ее не видно — отобразите соответствующее окно через меню View — Project Explorer) и добавьте в него следующий код:

   Private Sub Workbook_Open()      UserForm1.Show   End Sub   

И, наконец, вставьте обычный модуль (Insert — Module) и скопируйте туда это:

   Private Sub KillTheForm()      Unload UserForm1   End Sub   

Все. Можно закрывать редактор Visual Basic, сохранять файл и пробовать закрыть-открыть книгу…

Как это работает?

При открытии книги Excel выполняет процедуру Workbook_Open из модуля ЭтаКнига. Эта процедура отображает на экране нашу форму-заставку. При отображении формы запускается процедура UserForm_Activate, которая с задержкой в 5 секунд запускает макрос KillTheForm, который убирает форму с экрана.

Ссылки по теме

  • Что такое макросы, как с ними работать, куда вставлять код на Visual Basic
  • 2.6K

    12 марта 2004 года

    Lev_ru

    35 / / 05.03.2004

    Поскажите, пожалуйста, как сделать, чтобы при открытии книги, появлялся рисунок секунды на 3? То есть в принципе для начала делаем форму, вставляем рисунок, а как сделать, чтобы через три секунды она исчезла? Не могу разобраться со счетчиком…

    12 марта 2004 года

    SergeySV

    1.5K / / 19.03.2003

    Цитата:

    Originally posted by Lev_ru
    Поскажите, пожалуйста, как сделать, чтобы при открытии книги, появлялся рисунок секунды на 3? То есть в принципе для начала делаем форму, вставляем рисунок, а как сделать, чтобы через три секунды она исчезла? Не могу разобраться со счетчиком…

    Открываем форму в режиме vbModeless и запускаем таймер. В процедуре обработки сообщений от таймера обнуляем сам таймер и закрываем форму. Вроде все… В каком именно моменте проблемы?

    2.6K

    13 марта 2004 года

    Lev_ru

    35 / / 05.03.2004

    Цитата:

    Originally posted by SergeySV
    Открываем форму в режиме vbModeless и запускаем таймер. В процедуре обработки сообщений от таймера обнуляем сам таймер и закрываем форму. Вроде все… В каком именно моменте проблемы?

    Что такое режим vbModeless я так и непонял, даже в стравке не нашел. А на счет счетчика, может просто командой delay сделать?

    13 марта 2004 года

    SergeySV

    1.5K / / 19.03.2003

    Цитата:

    Как сделать заставку в excel?

    Как сделать заставку в excel?

    Как сделать заставку в excel?

    Originally posted by Lev_ru
    Что такое режим vbModeless я так и непонял, даже в стравке не нашел. А на счет счетчика, может просто командой delay сделать?

    Да все очень просто, когда ты показываешь свою форму

    MyForm.Show
    то раньше. в Office97 форма всегда открывалась в режимк modal, то есть фокус становился на форму, никуда перейти не закрыв форму нельзя было и главное — выполнение кода останавливалось на этой строчке, т.е.
    MyForm.Show
    a=3
    пока форма закрыта не будет, макрос не перейдет на строчку a=3

    Это удобно для организации диалогов, но абсолютно неприемливо, если хочешь сделать что-то типа твоей задачи, когда нужно показать форму и продолжить выполнение программы дальше и позволять пользователь лазить по всему Excel’ю. Для этого с office2000 добавили в метод Show параметры: vbModal(описано выше) и новый параметр — vbModeless. Последний параметр как раз и дает указание Excel’ю открыть форму и продолжить выполнение макроса дальше, а не застывать на месте.

    2.6K

    14 марта 2004 года

    Lev_ru

    35 / / 05.03.2004

    Цитата:

    Originally posted by SergeySV
    Да все очень просто, когда ты показываешь свою форму
    MyForm.Show
    то раньше. в Office97 форма всегда открывалась в режимк modal, то есть фокус становился на форму, никуда перейти не закрыв форму нельзя было и главное — выполнение кода останавливалось на этой строчке, т.е.
    MyForm.Show
    a=3
    пока форма закрыта не будет, макрос не перейдет на строчку a=3 Это удобно для организации диалогов, но абсолютно неприемливо, если хочешь сделать что-то типа твоей задачи, когда нужно показать форму и продолжить выполнение программы дальше и позволять пользователь лазить по всему Excel’ю. Для этого с office2000 добавили в метод Show параметры: vbModal(описано выше) и новый параметр — vbModeless. Последний параметр как раз и дает указание Excel’ю открыть форму и продолжить выполнение макроса дальше, а не застывать на месте.

    Всё понятно, modal=false, а я думал, что за vbModeless…

    3.7K

    14 марта 2004 года

    dedtolya

    41 / / 12.10.2003

    Цитата:

    Originally posted by Lev_ru
    Всё понятно, modal=false, а я думал, что за vbModeless…

    Dim Рис As Object

    Dim p1 As Long, a As Long
    p = 5000000 ‘ длительность паузы

    Set Рис = ActiveSheet.Pictures.Insert( _

    «C:Мои документыМои рисункиfloverpussywillow2.gif»)
    For i = 1 To p
    a = a + 1
    Next
    Рис.Delete

    Вместо цикла можно использовать функцию Timer

    Успехов dedtolya

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

    Рис. 1. Меню на основе элементов управления CommandButton или ListBox

    Скачать заметку в формате Word или pdf, примеры в архиве

    Создание меню

    Меню можно создать с помощью элементов управления CommandButton (рис. 1; см. файл userform menus.xlsm) и с помощью элемента управления ListBox. Каждый элемент управления CommandButton имеет собственную процедуру обработки событий. Например, представленная ниже процедура выполняется после щелчка на кнопке CommandButton1:

    Private Sub CommandButton1_Click()

        Me.Hide

        Call Macro1

        Unload Me

    End Sub

    Эта процедура приводит к вызову макроса Macro1 и закрытию диалогового окна UserForm. После щелчка на других кнопках (отличных от CommandButton1) вызываются похожие процедуры обработки событий.

    В случае использования элемента управления ListBox, перед отображением пользовательского диалогового окна вызывается процедура обработки события Initialize. В следующей процедуре используется метод Addltem для добавления шести опций в элемент управления ListBox:

    Private Sub UserForm_Initialize()

        With ListBox1

            .AddItem «Макрос1»

            .AddItem «Макрос2»

            .AddItem «Макрос3»

            .AddItem «Макрос4»

            .AddItem «Макрос5»

            .AddItem «Макрос6»

        End With

    End Sub

    Процедура обработки события привязывается к кнопке Выполнить:

    Private Sub ExecuteButton_Click()

        Select Case ListBox1.ListIndex

            Case -1

                MsgBox «Выберите макрос из списка.»

                Exit Sub

            Case 0: Me.Hide: Call Macro1

            Case 1: Me.Hide: Call Macro2

            Case 2: Me.Hide: Call Macro3

            Case 3: Me.Hide: Call Macro4

            Case 4: Me.Hide: Call Macro5

            Case 5: Me.Hide: Call Macro6

        End Select

        Unload Me

    End Sub

    Данная процедура проверяет значение свойства Listlndex элемента управления ListBox, чтобы определить, какой элемент выбран в списке (если свойство Listlndex равно –1, то не выбран ни один из элементов). После этого запускается соответствующий макрос.

    Выбор диапазона в пользовательской форме

    Некоторые встроенные диалоговые окна Excel предоставляют пользователю возможность выбирать диапазон. Например, диалоговое окно Подбор параметра, для вызова которого следует пройти по меню Данные –> Работа с данными –> Анализ «что если « –> Подбор параметра, запрашивает у пользователя два диапазона. Пользователь может или ввести имя диапазона непосредственно в окне, или применить мышь для выделения диапазона на листе.

    Пользовательское диалоговое окно также обеспечивает подобную функциональность. Это достигается с помощью элемента управления RefEdit. Данный элемент выглядит иначе, чем элемент выбора диапазона во встроенных диалоговых окнах Excel, однако работает точно так же. Если пользователь щелкнет на небольшой кнопке в правой части элемента управления, то диалоговое окно временно исчезнет, а на экране будет отображен небольшой указатель выбора диапазона.

    К сожалению, элемент управления RefEdit не позволяет использовать специальные клавиши при выделении диапазона (например, невозможно выделить ячейки до конца столбца, нажав комбинацию клавиш Shift+↓). Кроме того, после щелчка мышью на маленькой кнопке в правой части элемента управления (для временного сокрытия диалогового окна) можно применять только выделения с помощью мыши. Клавиатуру в этом случае применять нельзя.

    На рис. 2 представлено пользовательское диалоговое окно с добавленным элементом управления RefEdit (см. файл range selection demo.xlsm). Это диалоговое окно выполняет простую математическую операцию над всеми не содержащими формул и непустыми ячейками указанного диапазона. Выполняемая операция задается активным переключателем OptionButton.

    Рис. 2. С помощью элемента управления RefEdit можно выбрать диапазон

    Элемент управления RefEdit возвращает текстовую строку, которая представляет выбранный диапазон. Можно преобразовать эту строку в объект Range. Для этого используется оператор:

    Set UserRange = Range(RefEditl.Text)

    Удачной практикой считается инициализация элемента управления RefEdit для представления текущего выделения. Для этого в процедуре UserForm_Initialize воспользуйтесь оператором:

    RefEditl.Text = ActiveWindow.RangeSelection.Address

    Для достижения наилучших результатов не помещайте элемент управления RefEdit внутри элемента Frame либо MultiPage. Это может привести к сбою в работе Excel. Элемент управления RefEdit не всегда возвращает действительный диапазон. Выделение диапазона указателем мыши — это один из способов присвоения значения данному элементу управления. Пользователь может ввести в поле любой текст, а также отредактировать или удалить уже отображаемый текст. Таким образом, предварительно необходимо убедиться, что диапазон является допустимым.

    Следующий код — это пример одного из способов проверки допустимости введенного значения. Если определено, что значение неправильное, то пользователю выдается сообщение, а элемент управления RefEdit становится активным, предоставляя возможность ввести корректный диапазон.

        On Error Resume Next

        Set UserRange = Range(RefEdit1.Text)

        If Err 0 Then

            MsgBox «Выбран некорректный диапазон»

            RefEdit1.SetFocus

            Exit Sub

        End If

        On Error GoTo 0

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

    Set OneCell = Range(RefEditl.Text).Range("Al")

    Создание заставки

    Некоторые разработчики предпочитают отображать определенную вступительную информацию при запуске приложения. Эта методика называется заставкой. Без сомнения, все пользователи видели заставку Excel, которая отображается несколько секунд при запуске программы. В приложении Excel заставку можно создать с помощью пользовательского диалогового окна. В приведенном ниже примере реализуется автоматическое отображение заставки, которое исчезает по истечении пяти секунд (рис. 3; см. файл splash screen.xlsm). Для создания заставки выполните следующие действия:

    1. Создайте рабочую книгу.
    2. Активизируйте редактор VBE и вставьте пользовательское диалоговое окно в проект. Код в этом примере предполагает, что объект UserForm называется UserForm1.
    3. Поместите любые необходимые элементы управления в только что созданное диалоговое окно UserForm1. Например, вам может понадобиться расположить элемент управления Image, который будет содержать логотип компании (рис. 3).
    4. Вставьте процедуру в модуль кода для объекта ЭтаКнига (ThisWorkbook):

    Private Sub Workbook_Open()

        UserForm1.Show

    End Sub

    1. Вставьте следующую процедуру в модуль кода для объекта UserForm1 (эта процедура обеспечивает пятисекундную задержку). Если нужно другое время задержки, измените значение аргумента функции TimeValue.

    Private Sub UserForm_Activate()

        Application.OnTime Now + TimeValue(«00:00:05»), «KillTheForm»

    End Sub

    Рис. 3. Эта заставка на короткое время появляется на экране после открытия рабочей книги

    1. В общий модуль VBA вставьте следующую процедуру.

    Private Sub KillTheForm()

        Unload UserForm1

    End Sub

    При открытии рабочей книги будет выполнена процедура Workbook_Open и появится диалоговое окно UserForm (п. 4). В этот момент генерируется событие Activate, которое приводит к выполнению процедуры UserForm_ Activate (п. 5). Данная процедура использует метод OnTime объекта Application для выполнения процедуры KillTheForm в определенный момент времени. Однако предварительно определена задержка в пять секунд с момента возникновения события Activate. Процедура KillTheForm просто выгружает диалоговое окно UserForm из памяти.

    1. В качестве необязательного действия можно добавить элемент управления CommandButton с именем CancelButton, установить его свойство Cancel равным True и добавить представленную ниже процедуру обработки события в модуль кода формы UserForm.

    Private Sub CancelButton_Click()

        Unload Me

    End Sub

    Таким образом, пользователь сможет закрыть заставку, прежде чем пройдет указанное время задержки. Окно будет закрыто также в результате нажатия клавиши . Эту небольшую кнопку можно разместить за другим объектом, чтобы она не была видна.

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

    Для того чтобы выполнить VBA-процедуру при открытии документа, нужно так отобразить пользовательское диалоговое окно в немодальном режиме, чтобы код продолжал выполняться. Для этого измените процедуру WorkbookOpen следующим образом.

    Private Sub Workbook_Open()

        UserForml.Show vbModeless

        ‘ другой код

    End Sub

    Отключение кнопки закрытия пользовательского диалогового окна

    Если пользовательское диалоговое окно уже отображено на экране, щелчок на кнопке Закрыть в правом верхнем углу приведет к выгрузке формы UserForm из памяти. Иногда этого допускать нельзя. Например, иногда требуется, чтобы диалоговое окно UserForm закрывалось только после щелчка на специальной кнопке CommandButton. Несмотря на то что реально отключить кнопку Закрыть невозможно, вы вправе предотвратить закрытие диалогового окна, вызванное щелчком на этой кнопке. Для этого воспользуйтесь обработчиком события QueryClose (см. файл gueryclose demo.xlsm). Следующая процедура, которая расположена в модуле кода диалогового окна UserForm, выполняется перед закрытием формы (т.е. в момент возникновения события QueryClose).

    Private Sub UserForm_QueryClose _

      (Cancel As Integer, CloseMode As Integer)

        If CloseMode = vbFormControlMenu Then

            MsgBox «Щелкните на кнопке OK для закрытия формы.»

            Cancel = True

        End If

    End Sub

    Процедура UserForm_QueryClose использует два аргумента. Аргумент CloseMode содержит значение, которое указывает на причину возникновения события QueryClose. Если значение аргумента CloseMode равно vbFormControlMenu (встроенная константа), значит, пользователь щелкнул на кнопке Закрыть. В таком случае будет отображено сообщение (рис. 4); аргумент Cancel устанавливается равным True, и форма не закрывается.

    Рис. 4. Процедура перехватывает закрытие окна, и оставляет его открытым

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

    Application.EnableCancelKey = xlDisabled

    Прежде чем добавить этот оператор, удостоверьтесь, что в приложении нет ошибок. В противном случае возникает опасность формирования бесконечного цикла.

    Изменение размера диалогового окна

    Во многих приложениях используются окна, которые могут изменять собственные размеры, добавляя кнопки и опции. Например, высота диалогового окна Excel Найти и заменить, которое отображается после выбора команды Главная –> Редактирование –> Найти и выделить –> Заменить, увеличивается после щелчка на кнопке Параметры.

    Изменение размеров пользовательского диалогового окна осуществляется путем изменения значений свойств Width и Height объекта UserForm. На рис. 5а показано первоначальное диалоговое окно, а на рис. 5б показано это же окно после щелчка на кнопке Параметры. Обратите внимание на то, что надпись на кнопке изменяется в зависимости от размера диалогового окна (см. файл change userform size.xlsm).

    Рис. 5. Диалоговое окно: вверху – в стандартном режиме; внизу – после нажатия на кнопке Параметры

    Создавая пользовательское диалоговое окно, определите его максимальный размер, чтобы получить доступ ко всем элементам управления. После этого воспользуйтесь процедурой UserForm_Initialize для установки размеров диалогового окна по умолчанию.

    В коде применяются две константы, определенные в верхней части модуля.

    Const SmallSize As Integer = 124
    Const LargeSize As Integer = 164

    Пример предназначен для печати рабочих листов активной книги. Он позволяет пользователю указать листы, которые необходимо . Ниже приведена процедура обработки события, которая выполняется после щелчка на кнопке Параметры.

    Private Sub OptionsButton_Click()

        If OptionsButton.Caption = «Параметры >>» Then

            Me.Height = LargeSize

            OptionsButton.Caption = «>»

        End If

    End Sub

    Эта процедура проверяет значение свойства Caption объекта CommandButton и устанавливает значение свойства Height объекта UserForm в соответствии с полученным значением свойства Caption.

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

    Масштабирование и прокрутка листа в пользовательском диалоговом окне

    Для прокрутки и масштабирования листа при активном диалоговом окне можно применить элемент управления ScrollBar (рис. 6; см. файл zoom and scroll sheet.xlsm). В этом примере масштаб можно изменять в диапазоне от 100 до 400%. Два элемента управления ScrollBar в нижней части диалогового окна позволяют прокручивать лист по горизонтали и по вертикали.

    Рис. 6. Элементы управления ScrollBar позволяют прокручивать лист и изменять его масштаб

    Элементы управления инициализируются в процедуре UserForm_Initialize:

    Private Sub UserForm_Initialize()

        LabelZoom.Caption = ActiveWindow.Zoom & «%»

    ‘   Масштабирование

        With ScrollBarZoom

            .Min = 10

            .Max = 400

            .SmallChange = 1

            .LargeChange = 10

            .Value = ActiveWindow.Zoom

        End With

    ‘   Прокрутка по горизонтали

        With ScrollBarColumns

            .Min = 1

            .Max = ActiveSheet.UsedRange.Columns.Count

            .Value = ActiveWindow.ScrollColumn

            .LargeChange = 25

            .SmallChange = 1

        End With

    ‘   Прокрутка по вертикали

        With ScrollBarRows

            .Min = 1

            .Max = ActiveSheet.UsedRange.Rows.Count

            .Value = ActiveWindow.ScrollRow

            .LargeChange = 25

            .SmallChange = 1

        End With

    End Sub

    Эта процедура позволяет устанавливать значения различных свойств элементов управления ScrollBar. Значения определяются на основе данных, полученных из активного окна. При использовании элемента управления ScrollBarZoom выполняется процедура ScrollBarZoom_Change. Она устанавливает значение свойства Zoom объекта ActiveWindow равным значению свойства Value элемента управления ScrollBar. Кроме того, изменяется текст подписи, которая представляет текущий масштаб рабочего листа.

    Private Sub ScrollBarZoom_Change()

        With ActiveWindow

            .Zoom = ScrollBarZoom.Value

            LabelZoom = .Zoom & «%»

            .ScrollColumn = ScrollBarColumns.Value

            .ScrollRow = ScrollBarRows.Value

        End With

    End Sub

    Прокрутка листа осуществляется с помощью двух процедур. Эти процедуры устанавливают значение свойств ScrollRow и ScrollColumns объекта ActiveWindow равными значениям свойств Value элементов управления ScrollBar.

    Private Sub ScrollBarColumns_Change()

        ActiveWindow.ScrollColumn = ScrollBarColumns.Value

    End Sub

    Private Sub ScrollBarRows_Change()

        ActiveWindow.ScrollRow = ScrollBarRows.Value

    End Sub

    При нажатии на кнопку Ok пользовательская форма закрывается:

    Private Sub OKButton_Click()

        Unload Me

    End Sub

    Применение элемента управления MultiPage

    Элемент управления MultiPage применяется при отображении в пользовательских диалоговых окнах множества элементов управления. Элемент управления MultiPage позволяет группировать опции, а также размещать каждую группу на отдельной вкладке (рис. 7; см. файл multipage control demo.xlsm). Панель инструментов Toolbox также включает элемент управления TabStrip, напоминающий элемент управления MultiPage. Однако в отличие от MultiPage, элемент управления TabStrip не может включать другие объекты. Поскольку элемент управления MultiPage является более гибким, вряд ли вам придется обращаться к элементу управления TabStrip.

    Рис. 7. Элемент управления MultiPage группирует элементы управления на страницах, доступ к которым обеспечивается с вкладки

    Вкладка (или страница), которая отображается поверх всех остальных, определяется значением свойства Value элемента управления MultiPage. Значение 0 соответствует первой вкладке. Значение 1 вызывает отображение второй вкладки и т.д. По умолчанию элемент управления MultiPage состоит из двух страниц. Для того чтобы добавить дополнительные вкладки, щелкните на любой вкладке правой кнопкой мыши и в контекстном меню выберите пункт New Page.

    При работе с элементом управления MultiPage щелкните на вкладке, чтобы установить свойства страницы. В окне Properties отобразятся свойства, значения которых можно изменить. Иногда сложно выделить сам элемент управления MultiPage, так как щелчок на нем приводит к выделению страницы элемента управления. Для того чтобы выделить только элемент управления, щелкните на его границе. Кроме того, можете воспользоваться клавишей для циклического перемещения между элементами управления. Еще одним вариантом выделения элемента управления является выбор пункта MultiPage из раскрывающегося списка окна Properties.

    Если элемент управления MultiPage содержит много вкладок, то присвойте его свойству MultiRow значение True, чтобы отобразить вкладки в несколько строк. Если необходимо, то вместо вкладок можно отображать кнопки. Достаточно изменить значение свойства Style на 1. Если значение свойства Style равно 2, элемент управления MultiPage не будет отображать ни вкладки, ни кнопки.

    Свойство TabOrientation определяет расположение вкладок на элементе управления MultiPage. Для каждой страницы можно установить эффект перехода. Для этого воспользуйтесь свойством TransitionEffect. Например, щелчок на вкладке приведет к тому, что новая страница «отодвинет» старую. Применяйте свойство TransitionPeriod, чтобы задать скорость эффекта перехода.

    Использование внешних элементов управления

    Пример, рассматриваемый в этом разделе, основан на элементе управления Microsoft Windows Media Player. Несмотря на то что он не является элементом управления Excel (настраивается при установке Windows), он прекрасно работает с формами UserForm. Для того чтобы воспользоваться элементом управления Microsoft Windows Media Player выполните следующие действия:

    1. Активизируйте среду VBE.
    2. Создайте новую пользовательскую форму: Insert –> UserForm.
    3. Щелкните правой кнопкой мыши на панели Toolbox и в контекстном меню выберите параметр Additional Controls (Дополнительные элементы управления). Если окно Toolbox не отображается, выполните команду View –> Toolbox.
    4. В окне Additional Controls установите флажок Windows Media Player (рис. 8).
    5. Щелкните на кнопке ОК. Набор инструментов пополнится новым элементом управления.

    Рис. 8. Подключение элемента управления Microsoft Windows Media Player

    На рис. 9 показаны элемент управления Windows Media Player, встроенный в форму UserForm, а также окно Properties (см. также файл mediaplayer.xlsm, расположенный в отдельной папке). Свойство URL определяет URL-ссылку воспроизводимой композиции (музыкальная запись или видеоролик). Если композиция находится на жестком диске вашего компьютера, свойство URL определяет полный путь и имя соответствующего файла.

    Рис. 9. Элемент управления Windows Media Player, встроенный в форму

    На рис. 10 показан пример использования этого элемента управления. Для сокрытия окна, предназначенного для отображения видеороликов, была уменьшена высота окна элемента управления Windows Media Player. Также был добавлен список, созданный на основе элемента управления ListBox, в котором отображаются аудиофайлы MP3. После щелчка на кнопке Пуск начинается воспроизведение выбранного файла. Щелчок на кнопке Закрыть приведет к прекращению воспроизведения и к закрытию окна UserForm. Форма UserForm отображается в немодальном режиме, поэтому можно продолжать работу во время отображения диалогового окна.

    Рис. 10. Элемент управления Windows Media Player в действии

    Названия МРЗ-файлов в окне списка отображаются с помощью процедуры UserForm_Initialize. В целях упрощения алгоритма аудофайлы находятся в той же папке, что и рабочая книга. Можно реализовать и более гибкий подход, предусматривающий выбор пользователем папки, содержащей требуемые аудиофайлы.

    Private Sub UserForm_Initialize()

        Dim FileName As String

    ‘   Заполнение списка MP3-файлами

        FileName = Dir(ThisWorkbook.Path & «*.mp3», vbNormal)

        Do While Len(FileName) > 0

            ListBox1.AddItem FileName

            FileName = Dir()

        Loop

        ListBox1.ListIndex = 0

    End Sub

    Код обработчика событий PlayButton_Click включает единственный оператор, который присваивает выбранное имя файла свойству URL объекта WindowsMediaPlayer1.

    Private Sub PlayButton_Click()

    ‘   Свойство URL загружает трек и запускает плеер

        WindowsMediaPlayer1.URL = _

          ThisWorkbook.Path & «» & ListBox1.List(ListBox1.ListIndex)

    End Sub

    Анимация элемента управления Label

    Форма UserForm (рис. 11) представляет собой интерактивный генератор случайных чисел. Два элемента управления TextBox содержат верхнее и нижнее значения для случайного числа. Элемент управления Label изначально отображает четыре знака вопроса, а после щелчка мышью на кнопке Пуск отображаются анимированные случайные числа. При этом кнопка Пуск превращается в кнопку Остановить, а щелчок на ней мышью приводит к прекращению анимации и отображению случайного числа. Код, связанный с кнопкой генератора случайных чисел можно найти в модуле UserForm1 файла random number generator.xlsm.

    Рис. 11. Генератор случайных чисел

    Поскольку кнопка выполняет две функции (запуск и остановка анимации), в процедуре используется общедоступная переменная Stopped, с помощью которой отслеживается состояние кнопки. Первая часть процедуры состоит из двух структур If-Then, с помощью которых проверяется содержимое элементов управления TextBox. Два другая подобных оператора позволяют удостовериться в том, что меньшая величина действительно не превосходит большей величины. В следующем разделе кода осуществляется настройка размера шрифта элемента управления Label на основании максимальной величины. Цикл Do Until loop генерирует и отображает случайные числа. Обратите внимание на оператор DoEvents. Он позволяет Excel использовать все возможности операционной системы. Если бы его не было, элемент управления Label не смог бы отобразить каждое генерируемое случайное число. Другими словами, именно оператор DoEvents делает возможной анимацию.

    Форма UserForm также включает элемент управления CommandButton, который выполняет функции кнопки Отмена. Этот элемент управления находится за пределами окна UserForm, поэтому невидим. Свойству Cancel элемента управления CommandButton присвоено значение True. Вследствие этого нажатие клавиши дает тот же эффект, что и щелчок на кнопке Отмена. Соответствующая процедура обработки событий присваивает переменной Stopped значение True и выгружает форму UserForm.

    По материалам книги Джон Уокенбах. Excel 2010. Профессиональное программирование на VBA. – М: Диалектика, 2013. – С. 439–449, 466–472.

    Did you find apk for android? You can find new Free Android Games and apps.

    Содержание

    1. Заставка при запуске excel vba
    2. Как сделать заставку в excel?
    3. Шаг 1. Создаем экранную форму
    4. Шаг 2. Добавляем управляющий код
    5. Как это работает?
    6. Ссылки по теме
    7. Создание меню
    8. Выбор диапазона в пользовательской форме
    9. Создание заставки
    10. Отключение кнопки закрытия пользовательского диалогового окна
    11. Изменение размера диалогового окна
    12. Масштабирование и прокрутка листа в пользовательском диалоговом окне
    13. Применение элемента управления MultiPage
    14. Использование внешних элементов управления

    Заставка при запуске excel vba

    Заставка при загрузке книги Excel

    Этот прием позволит Вам выводить на экран окно-заставку при открытии любой заданной книги в Excel.

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

    Шаг 1. Создаем экранную форму

    Откройте редактор Visual Basic ( Сервис — Макрос — Редактор Visual Basic ) и создайте новую форму, используя команду меню Insert — Form . Появится пустая серая оконная форма будущей заставки. Добавим на нее изображение при помощи панели инструментов Toolbox (если у вас ее не видно, то зайдите в меню View — Toolbox ):

    Нажмите кнопку Image и растяните на форме прямоугольник — в него будет помещено фоновое изображение. Затем на панели инструментов Properties (если у вас ее не видно, то выберите в меню View — Properties ) задайте выберите файл картинки в поле Picture :

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

    Чтобы написать на форме текст, можно использовать элемент управления Label с панели Toolbox :

    Ну, и наконец, выделив предварительно всю форму, можно задать текст в строке заголовка, используя свойство Caption в панели Properties :

    В итоге у вас должно получиться нечто подобное:

    Шаг 2. Добавляем управляющий код

    Откройте модуль ЭтаКнига и добавьте в него следующий код:

    Private Sub Workbook_Open()
    UserForm1.Show
    End Sub

    Должно получиться следующее:

    Затем щелкните правой кнопкой мыши по форме и выберите View Code :

    В открывшийся модуль формы добавьте такой код:

    Private Sub UserForm_Activate()
    Application.OnTime Now + TimeValue(«00:00:05»), «KillTheForm»
    End Sub

    И, наконец, вставьте обычный модуль ( Insert — Module ) и скопируйте туда это:

    Private Sub KillTheForm()
    Unload UserForm1
    End Sub

    Все. Можно закрывать редактор Visual Basic, сохранять файл и пробовать закрыть-открыть книгу.

    Как это работает?

    При открытии книги Excel выполняет процедуру Workbook_Open из модуля ЭтаКнига . Эта процедура отображает на экране нашу форму-заставку. При отображении формы запускается процедура UserForm_Activate , которая с задержкой в 5 секунд запускает макрос KillTheForm , который убирает форму с экрана.

    Источник

    Как сделать заставку в 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, который убирает форму с экрана.

    Ссылки по теме

    • Что такое макросы, как с ними работать, куда вставлять код на Visual Basic

    12 марта 2004 года

    Поскажите, пожалуйста, как сделать, чтобы при открытии книги, появлялся рисунок секунды на 3? То есть в принципе для начала делаем форму, вставляем рисунок, а как сделать, чтобы через три секунды она исчезла? Не могу разобраться со счетчиком…

    12 марта 2004 года

    Originally posted by Lev_ru
    Поскажите, пожалуйста, как сделать, чтобы при открытии книги, появлялся рисунок секунды на 3? То есть в принципе для начала делаем форму, вставляем рисунок, а как сделать, чтобы через три секунды она исчезла? Не могу разобраться со счетчиком…

    Открываем форму в режиме vbModeless и запускаем таймер. В процедуре обработки сообщений от таймера обнуляем сам таймер и закрываем форму. Вроде все… В каком именно моменте проблемы?

    13 марта 2004 года

    Originally posted by SergeySV
    Открываем форму в режиме vbModeless и запускаем таймер. В процедуре обработки сообщений от таймера обнуляем сам таймер и закрываем форму. Вроде все… В каком именно моменте проблемы?

    Что такое режим vbModeless я так и непонял, даже в стравке не нашел. А на счет счетчика, может просто командой delay сделать?

    13 марта 2004 года

    Originally posted by Lev_ru
    Что такое режим vbModeless я так и непонял, даже в стравке не нашел. А на счет счетчика, может просто командой delay сделать?

    Да все очень просто, когда ты показываешь свою форму

    MyForm.Show
    то раньше. в Office97 форма всегда открывалась в режимк modal, то есть фокус становился на форму, никуда перейти не закрыв форму нельзя было и главное — выполнение кода останавливалось на этой строчке, т.е.
    MyForm.Show
    a=3
    пока форма закрыта не будет, макрос не перейдет на строчку a=3

    Это удобно для организации диалогов, но абсолютно неприемливо, если хочешь сделать что-то типа твоей задачи, когда нужно показать форму и продолжить выполнение программы дальше и позволять пользователь лазить по всему Excel’ю. Для этого с office2000 добавили в метод Show параметры: vbModal(описано выше) и новый параметр — vbModeless. Последний параметр как раз и дает указание Excel’ю открыть форму и продолжить выполнение макроса дальше, а не застывать на месте.

    14 марта 2004 года

    Originally posted by SergeySV
    Да все очень просто, когда ты показываешь свою форму
    MyForm.Show
    то раньше. в Office97 форма всегда открывалась в режимк modal, то есть фокус становился на форму, никуда перейти не закрыв форму нельзя было и главное — выполнение кода останавливалось на этой строчке, т.е.
    MyForm.Show
    a=3
    пока форма закрыта не будет, макрос не перейдет на строчку a=3 Это удобно для организации диалогов, но абсолютно неприемливо, если хочешь сделать что-то типа твоей задачи, когда нужно показать форму и продолжить выполнение программы дальше и позволять пользователь лазить по всему Excel’ю. Для этого с office2000 добавили в метод Show параметры: vbModal(описано выше) и новый параметр — vbModeless. Последний параметр как раз и дает указание Excel’ю открыть форму и продолжить выполнение макроса дальше, а не застывать на месте.

    Всё понятно, modal=false, а я думал, что за vbModeless…

    14 марта 2004 года

    Originally posted by Lev_ru
    Всё понятно, modal=false, а я думал, что за vbModeless…

    Dim Рис As Object

    Dim p1 As Long, a As Long
    p = 5000000 ‘ длительность паузы

    Set Рис = ActiveSheet.Pictures.Insert( _

    «C:Мои документыМои рисункиfloverpussywillow2.gif»)
    For i = 1 To p
    a = a + 1
    Next
    Рис.Delete

    Вместо цикла можно использовать функцию Timer

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

    Рис. 1. Меню на основе элементов управления CommandButton или ListBox

    Скачать заметку в формате Word или pdf, примеры в архиве

    Создание меню

    Меню можно создать с помощью элементов управления CommandButton (рис. 1; см. файл userform menus.xlsm) и с помощью элемента управления ListBox. Каждый элемент управления CommandButton имеет собственную процедуру обработки событий. Например, представленная ниже процедура выполняется после щелчка на кнопке CommandButton1:

    Private Sub CommandButton1_Click()

    Эта процедура приводит к вызову макроса Macro1 и закрытию диалогового окна UserForm. После щелчка на других кнопках (отличных от CommandButton1) вызываются похожие процедуры обработки событий.

    В случае использования элемента управления ListBox, перед отображением пользовательского диалогового окна вызывается процедура обработки события Initialize. В следующей процедуре используется метод Addltem для добавления шести опций в элемент управления ListBox:

    Private Sub UserForm_Initialize()

    Процедура обработки события привязывается к кнопке Выполнить:

    Private Sub ExecuteButton_Click()

    Select Case ListBox1.ListIndex

    MsgBox «Выберите макрос из списка.»

    Case 0: Me.Hide: Call Macro1

    Case 1: Me.Hide: Call Macro2

    Case 2: Me.Hide: Call Macro3

    Case 3: Me.Hide: Call Macro4

    Case 4: Me.Hide: Call Macro5

    Case 5: Me.Hide: Call Macro6

    Данная процедура проверяет значение свойства Listlndex элемента управления ListBox, чтобы определить, какой элемент выбран в списке (если свойство Listlndex равно –1, то не выбран ни один из элементов). После этого запускается соответствующий макрос.

    Выбор диапазона в пользовательской форме

    Некоторые встроенные диалоговые окна Excel предоставляют пользователю возможность выбирать диапазон. Например, диалоговое окно Подбор параметра, для вызова которого следует пройти по меню Данные –> Работа с данными –> Анализ «что если « –> Подбор параметра, запрашивает у пользователя два диапазона. Пользователь может или ввести имя диапазона непосредственно в окне, или применить мышь для выделения диапазона на листе.

    Пользовательское диалоговое окно также обеспечивает подобную функциональность. Это достигается с помощью элемента управления RefEdit. Данный элемент выглядит иначе, чем элемент выбора диапазона во встроенных диалоговых окнах Excel, однако работает точно так же. Если пользователь щелкнет на небольшой кнопке в правой части элемента управления, то диалоговое окно временно исчезнет, а на экране будет отображен небольшой указатель выбора диапазона.

    К сожалению, элемент управления RefEdit не позволяет использовать специальные клавиши при выделении диапазона (например, невозможно выделить ячейки до конца столбца, нажав комбинацию клавиш Shift+↓). Кроме того, после щелчка мышью на маленькой кнопке в правой части элемента управления (для временного сокрытия диалогового окна) можно применять только выделения с помощью мыши. Клавиатуру в этом случае применять нельзя.

    На рис. 2 представлено пользовательское диалоговое окно с добавленным элементом управления RefEdit (см. файл range selection demo.xlsm). Это диалоговое окно выполняет простую математическую операцию над всеми не содержащими формул и непустыми ячейками указанного диапазона. Выполняемая операция задается активным переключателем OptionButton.

    Рис. 2. С помощью элемента управления RefEdit можно выбрать диапазон

    Элемент управления RefEdit возвращает текстовую строку, которая представляет выбранный диапазон. Можно преобразовать эту строку в объект Range. Для этого используется оператор:

    Set UserRange = Range(RefEditl.Text)

    Удачной практикой считается инициализация элемента управления RefEdit для представления текущего выделения. Для этого в процедуре UserForm_Initialize воспользуйтесь оператором:

    Для достижения наилучших результатов не помещайте элемент управления RefEdit внутри элемента Frame либо MultiPage. Это может привести к сбою в работе Excel. Элемент управления RefEdit не всегда возвращает действительный диапазон. Выделение диапазона указателем мыши — это один из способов присвоения значения данному элементу управления. Пользователь может ввести в поле любой текст, а также отредактировать или удалить уже отображаемый текст. Таким образом, предварительно необходимо убедиться, что диапазон является допустимым.

    Следующий код — это пример одного из способов проверки допустимости введенного значения. Если определено, что значение неправильное, то пользователю выдается сообщение, а элемент управления RefEdit становится активным, предоставляя возможность ввести корректный диапазон.

    On Error Resume Next

    Set UserRange = Range(RefEdit1.Text)

    MsgBox «Выбран некорректный диапазон»

    On Error GoTo 0

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

    Set OneCell = Range(RefEditl.Text).Range( » Al » )

    Создание заставки

    Некоторые разработчики предпочитают отображать определенную вступительную информацию при запуске приложения. Эта методика называется заставкой. Без сомнения, все пользователи видели заставку Excel, которая отображается несколько секунд при запуске программы. В приложении Excel заставку можно создать с помощью пользовательского диалогового окна. В приведенном ниже примере реализуется автоматическое отображение заставки, которое исчезает по истечении пяти секунд (рис. 3; см. файл splash screen.xlsm). Для создания заставки выполните следующие действия:

    1. Создайте рабочую книгу.
    2. Активизируйте редактор VBE и вставьте пользовательское диалоговое окно в проект. Код в этом примере предполагает, что объект UserForm называется UserForm1.
    3. Поместите любые необходимые элементы управления в только что созданное диалоговое окно UserForm1. Например, вам может понадобиться расположить элемент управления Image, который будет содержать логотип компании (рис. 3).
    4. Вставьте процедуру в модуль кода для объекта ЭтаКнига (ThisWorkbook):

    Private Sub Workbook_Open()

    1. Вставьте следующую процедуру в модуль кода для объекта UserForm1 (эта процедура обеспечивает пятисекундную задержку). Если нужно другое время задержки, измените значение аргумента функции TimeValue.

    Private Sub UserForm_Activate()

    Application.OnTime Now + TimeValue(«00:00:05»), «KillTheForm»

    Рис. 3. Эта заставка на короткое время появляется на экране после открытия рабочей книги

    1. В общий модуль VBA вставьте следующую процедуру.

    Private Sub KillTheForm()

    При открытии рабочей книги будет выполнена процедура Workbook_Open и появится диалоговое окно UserForm (п. 4). В этот момент генерируется событие Activate, которое приводит к выполнению процедуры UserForm_ Activate (п. 5). Данная процедура использует метод OnTime объекта Application для выполнения процедуры KillTheForm в определенный момент времени. Однако предварительно определена задержка в пять секунд с момента возникновения события Activate. Процедура KillTheForm просто выгружает диалоговое окно UserForm из памяти.

    1. В качестве необязательного действия можно добавить элемент управления CommandButton с именем CancelButton, установить его свойство Cancel равным True и добавить представленную ниже процедуру обработки события в модуль кода формы UserForm.

    Private Sub CancelButton_Click()

    Таким образом, пользователь сможет закрыть заставку, прежде чем пройдет указанное время задержки. Окно будет закрыто также в результате нажатия клавиши . Эту небольшую кнопку можно разместить за другим объектом, чтобы она не была видна.

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

    Для того чтобы выполнить VBA-процедуру при открытии документа, нужно так отобразить пользовательское диалоговое окно в немодальном режиме, чтобы код продолжал выполняться. Для этого измените процедуру WorkbookOpen следующим образом.

    Private Sub Workbook_Open()

    Отключение кнопки закрытия пользовательского диалогового окна

    Если пользовательское диалоговое окно уже отображено на экране, щелчок на кнопке Закрыть в правом верхнем углу приведет к выгрузке формы UserForm из памяти. Иногда этого допускать нельзя. Например, иногда требуется, чтобы диалоговое окно UserForm закрывалось только после щелчка на специальной кнопке CommandButton. Несмотря на то что реально отключить кнопку Закрыть невозможно, вы вправе предотвратить закрытие диалогового окна, вызванное щелчком на этой кнопке. Для этого воспользуйтесь обработчиком события QueryClose (см. файл gueryclose demo.xlsm). Следующая процедура, которая расположена в модуле кода диалогового окна UserForm, выполняется перед закрытием формы (т.е. в момент возникновения события QueryClose).

    Private Sub UserForm_QueryClose _

    (Cancel As Integer, CloseMode As Integer)

    If CloseMode = vbFormControlMenu Then

    MsgBox «Щелкните на кнопке OK для закрытия формы.»

    Процедура UserForm_QueryClose использует два аргумента. Аргумент CloseMode содержит значение, которое указывает на причину возникновения события QueryClose. Если значение аргумента CloseMode равно vbFormControlMenu (встроенная константа), значит, пользователь щелкнул на кнопке Закрыть. В таком случае будет отображено сообщение (рис. 4); аргумент Cancel устанавливается равным True, и форма не закрывается.

    Рис. 4. Процедура перехватывает закрытие окна, и оставляет его открытым

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

    Прежде чем добавить этот оператор, удостоверьтесь, что в приложении нет ошибок. В противном случае возникает опасность формирования бесконечного цикла.

    Изменение размера диалогового окна

    Во многих приложениях используются окна, которые могут изменять собственные размеры, добавляя кнопки и опции. Например, высота диалогового окна Excel Найти и заменить, которое отображается после выбора команды Главная –> Редактирование –> Найти и выделить –> Заменить, увеличивается после щелчка на кнопке Параметры.

    Изменение размеров пользовательского диалогового окна осуществляется путем изменения значений свойств Width и Height объекта UserForm. На рис. 5а показано первоначальное диалоговое окно, а на рис. 5б показано это же окно после щелчка на кнопке Параметры. Обратите внимание на то, что надпись на кнопке изменяется в зависимости от размера диалогового окна (см. файл change userform size.xlsm).

    Рис. 5. Диалоговое окно: вверху – в стандартном режиме; внизу – после нажатия на кнопке Параметры

    Создавая пользовательское диалоговое окно, определите его максимальный размер, чтобы получить доступ ко всем элементам управления. После этого воспользуйтесь процедурой UserForm_Initialize для установки размеров диалогового окна по умолчанию.

    В коде применяются две константы, определенные в верхней части модуля.

    Const SmallSize As Integer = 124
    Const LargeSize As Integer = 164

    Пример предназначен для печати рабочих листов активной книги. Он позволяет пользователю указать листы, которые необходимо . Ниже приведена процедура обработки события, которая выполняется после щелчка на кнопке Параметры.

    Private Sub OptionsButton_Click()

    If OptionsButton.Caption = «Параметры >>» Then

    Эта процедура проверяет значение свойства Caption объекта CommandButton и устанавливает значение свойства Height объекта UserForm в соответствии с полученным значением свойства Caption.

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

    Масштабирование и прокрутка листа в пользовательском диалоговом окне

    Для прокрутки и масштабирования листа при активном диалоговом окне можно применить элемент управления ScrollBar (рис. 6; см. файл zoom and scroll sheet.xlsm). В этом примере масштаб можно изменять в диапазоне от 100 до 400%. Два элемента управления ScrollBar в нижней части диалогового окна позволяют прокручивать лист по горизонтали и по вертикали.

    Рис. 6. Элементы управления ScrollBar позволяют прокручивать лист и изменять его масштаб

    Элементы управления инициализируются в процедуре UserForm_Initialize:

    Private Sub UserForm_Initialize()

    ‘ Прокрутка по горизонтали

    ‘ Прокрутка по вертикали

    Эта процедура позволяет устанавливать значения различных свойств элементов управления ScrollBar. Значения определяются на основе данных, полученных из активного окна. При использовании элемента управления ScrollBarZoom выполняется процедура ScrollBarZoom_Change. Она устанавливает значение свойства Zoom объекта ActiveWindow равным значению свойства Value элемента управления ScrollBar. Кроме того, изменяется текст подписи, которая представляет текущий масштаб рабочего листа.

    Private Sub ScrollBarZoom_Change()

    Прокрутка листа осуществляется с помощью двух процедур. Эти процедуры устанавливают значение свойств ScrollRow и ScrollColumns объекта ActiveWindow равными значениям свойств Value элементов управления ScrollBar.

    Private Sub ScrollBarColumns_Change()

    Private Sub ScrollBarRows_Change()

    При нажатии на кнопку Ok пользовательская форма закрывается:

    Private Sub OKButton_Click()

    Применение элемента управления MultiPage

    Элемент управления MultiPage применяется при отображении в пользовательских диалоговых окнах множества элементов управления. Элемент управления MultiPage позволяет группировать опции, а также размещать каждую группу на отдельной вкладке (рис. 7; см. файл multipage control demo.xlsm). Панель инструментов Toolbox также включает элемент управления TabStrip, напоминающий элемент управления MultiPage. Однако в отличие от MultiPage, элемент управления TabStrip не может включать другие объекты. Поскольку элемент управления MultiPage является более гибким, вряд ли вам придется обращаться к элементу управления TabStrip.

    Рис. 7. Элемент управления MultiPage группирует элементы управления на страницах, доступ к которым обеспечивается с вкладки

    Вкладка (или страница), которая отображается поверх всех остальных, определяется значением свойства Value элемента управления MultiPage. Значение 0 соответствует первой вкладке. Значение 1 вызывает отображение второй вкладки и т.д. По умолчанию элемент управления MultiPage состоит из двух страниц. Для того чтобы добавить дополнительные вкладки, щелкните на любой вкладке правой кнопкой мыши и в контекстном меню выберите пункт New Page.

    При работе с элементом управления MultiPage щелкните на вкладке, чтобы установить свойства страницы. В окне Properties отобразятся свойства, значения которых можно изменить. Иногда сложно выделить сам элемент управления MultiPage, так как щелчок на нем приводит к выделению страницы элемента управления. Для того чтобы выделить только элемент управления, щелкните на его границе. Кроме того, можете воспользоваться клавишей для циклического перемещения между элементами управления. Еще одним вариантом выделения элемента управления является выбор пункта MultiPage из раскрывающегося списка окна Properties.

    Если элемент управления MultiPage содержит много вкладок, то присвойте его свойству MultiRow значение True, чтобы отобразить вкладки в несколько строк. Если необходимо, то вместо вкладок можно отображать кнопки. Достаточно изменить значение свойства Style на 1. Если значение свойства Style равно 2, элемент управления MultiPage не будет отображать ни вкладки, ни кнопки.

    Свойство TabOrientation определяет расположение вкладок на элементе управления MultiPage. Для каждой страницы можно установить эффект перехода. Для этого воспользуйтесь свойством TransitionEffect. Например, щелчок на вкладке приведет к тому, что новая страница «отодвинет» старую. Применяйте свойство TransitionPeriod, чтобы задать скорость эффекта перехода.

    Использование внешних элементов управления

    Пример, рассматриваемый в этом разделе, основан на элементе управления Microsoft Windows Media Player. Несмотря на то что он не является элементом управления Excel (настраивается при установке Windows), он прекрасно работает с формами UserForm. Для того чтобы воспользоваться элементом управления Microsoft Windows Media Player выполните следующие действия:

    1. Активизируйте среду VBE.
    2. Создайте новую пользовательскую форму: Insert –> UserForm.
    3. Щелкните правой кнопкой мыши на панели Toolbox и в контекстном меню выберите параметр Additional Controls (Дополнительные элементы управления). Если окно Toolbox не отображается, выполните команду View –> Toolbox.
    4. В окне Additional Controls установите флажок Windows Media Player (рис. 8).
    5. Щелкните на кнопке ОК. Набор инструментов пополнится новым элементом управления.

    Рис. 8. Подключение элемента управления Microsoft Windows Media Player

    На рис. 9 показаны элемент управления Windows Media Player, встроенный в форму UserForm, а также окно Properties (см. также файл mediaplayer.xlsm, расположенный в отдельной папке). Свойство URL определяет URL-ссылку воспроизводимой композиции (музыкальная запись или видеоролик). Если композиция находится на жестком диске вашего компьютера, свойство URL определяет полный путь и имя соответствующего файла.

    Рис. 9. Элемент управления Windows Media Player, встроенный в форму

    На рис. 10 показан пример использования этого элемента управления. Для сокрытия окна, предназначенного для отображения видеороликов, была уменьшена высота окна элемента управления Windows Media Player. Также был добавлен список, созданный на основе элемента управления ListBox, в котором отображаются аудиофайлы MP3. После щелчка на кнопке Пуск начинается воспроизведение выбранного файла. Щелчок на кнопке Закрыть приведет к прекращению воспроизведения и к закрытию окна UserForm. Форма UserForm отображается в немодальном режиме, поэтому можно продолжать работу во время отображения диалогового окна.

    Рис. 10. Элемент управления Windows Media Player в действии

    Названия МРЗ-файлов в окне списка отображаются с помощью процедуры UserForm_Initialize. В целях упрощения алгоритма аудофайлы находятся в той же папке, что и рабочая книга. Можно реализовать и более гибкий подход, предусматривающий выбор пользователем папки, содержащей требуемые аудиофайлы.

    Источник

    Adblock
    detector

    Create a pop-up window, splash screen, that appears when Excel starts.

    This allows you to add a new level of professionalism to your workbooks.

    0b74b9255ca89380d3e90198abaa7b24.jpg

    Sections:

    Add a Splash Screen

    AutoClose the Splash Screen

    Remove Borders and the Title Bar from the Splash Screen

    Notes

    Add a Splash Screen

    Create a UserForm

    A UserForm is what will be displayed as the splash screen.

    If you do not know how to create a UserForm, view our tutorial on creating a UserForm.

    Here is a simple splash screen example:

    be41c66f21199fadd57a27371aa9c8e6.png

    This contains only a Label and an Image.

    Make the UserForm Run When Excel Starts

    The splash screen must appear when Excel first starts. To do this, we have to put a piece of code within the ThisWorkbook section of the VBA window.

    Go to the VBA window (Alt+F11) > Double-click ThisWorkbook > Place the code into the window that opens.

    Private Sub Workbook_Open()
    
    UserForm1.Show
    
    End Sub

    UserForm1 is the name of the form that you want to be displayed.

    If you already have code that runs for the Workbook_Open event, just paste the line UserForm1.Show into that code section.

    8ed0c69164592fdf8c63ac92cb9fc5c6.png

    AutoClose the Splash Screen

    You can have the splash screen appear for a few seconds and then disappear. This is a simple way to let the user see it without making them take an action to close the window.

    To do this, we put two lines of code into the UserForm_Activate event.

    Go to the VBA window (Alt+F11) > right-click the form > click View Code > paste this code:

    Private Sub UserForm_Activate()
    
    'Pause the window.
    Application.Wait (Now + TimeValue("00:00:04"))
    
    'Close the window.
    Unload Me
    
    End Sub

    This will make the splash screen appear for 4 seconds.

    Change the 04 to any value from 1 to 59 to keep the window open for more or less time.

    159bc63ff20543cec7359782dbf058cd.png

    Once you do this, every time you go to view the splash screen, it will only appear for the prescribed amount of time.

    Remove Borders and the Title Bar from the Splash Screen

    To make the splash screen look more professional, you can remove the title bar, that contains the title of the window, and the close button, as well as removing the border that surrounds the form.

    Note: before you do this, you must have a way to close the form, either by placing a close button on the form, making a click-event that closes the form, or by having the form auto-close after so many seconds, like we did in the example above.

    Removing the Title bar and border is an annoyingly complex thing to do, as such, we have an entire tutorial on this topic and you should view it if you want to do this: Remove the Title Bar from a UserForm.

    Before Removing the Title Bar and Border

    9d9f55ffb0530a97f65349faa3f9b3f0.jpg

    After Removing the Title Bar and Border

    a8d88b469c2648fa5caf63f5dd784adf.jpg

    Notes

    Macros must be enabled for the splash screen to appear.

    Make sure that you have a way to close the splash screen if you have removed the title bar and border!

    Download the sample file for this tutorial to get this example in Excel.

    Similar Content on TeachExcel

    Create a Custom Function in Excel — UDF

    Tutorial: How to create a custom worksheet function in Excel. These are called User Defined Function…

    Dynamic Named Range in Excel

    Tutorial:
    How to create a named range that expands automatically when a new value is added to the r…

    Make a UserForm in Excel

    Tutorial: Let’s create a working UserForm in Excel.
    This is a step-by-step tutorial that shows you e…

    Create a Line Chart with a Macro in Excel

    Macro: Create a line chart in Excel with this macro. This allows you to quickly and easily create…

    Create a Bar Chart With a Macro in Excel

    Macro: Create a bar chart in Excel with this macro. You will be able to quickly and easily turn a…

    Thermometer Chart in Excel

    Tutorial:
    How to create a thermometer chart in Excel.

    This is what we want:

    Steps to Create a The…

    Subscribe for Weekly Tutorials

    BONUS: subscribe now to download our Top Tutorials Ebook!

    Понравилась статья? Поделить с друзьями:
  • Запускать макрос при открытии книги excel
  • Зарплатный табель образец excel
  • Запускать все макросы excel
  • Зарплатный табель в excel скачать бесплатно
  • Запуска надстройки в excel