Главная страница
Навигация по странице:

  • Значение Возвращаемое значение

  • 2.9.4. Объединение текстовых строк

  • 2.10. Концепция событий Excel

  • 2.10.1. Типы событий Excel

  • 2.10.2. События объекта Workbook

  • Таблица события объекта Workbook

  • BeforePrint Event

  • Example

  • General

  • 2.10.3. События объекта Worksheet

  • 2.10.4. События объекта Application

  • 2.10.5. События объекта UserForm Эти события будут рассмотрены при изложении технологии работы с пользовательскими формами. 2.10.6. События, не связанные с конкретными объектами

  • 2.10.6.1. Метод OnKey

  • Специальная клавиша Код От F1 до F15 От {F1} до {F15} {LEFT} {RIGT} {DOWN} {UP} End {END} Insert { INSERT} Клавиша-модификатор

  • 2.10.6.2. Событие OnTime

  • 2.11. Формы пользователя

  • Программирование VBA. Федеральное агентство по образованию государственное образовательное учреждение высшего профессионального образования


    Скачать 2.93 Mb.
    НазваниеФедеральное агентство по образованию государственное образовательное учреждение высшего профессионального образования
    АнкорПрограммирование VBA.pdf
    Дата24.04.2017
    Размер2.93 Mb.
    Формат файлаpdf
    Имя файлаПрограммирование VBA.pdf
    ТипУчебное пособие
    #4339
    страница5 из 13
    1   2   3   4   5   6   7   8   9   ...   13
    2.9.3.
    Метод InputBox
    В Excel имеется еще один способ ввода данных пользователем в ин- терактивном режиме, который имеет называние метод InputBox. Формат метода:
    Application.InputBox(Prompt,Title,Default,Left,Top,HelpFile,HelpContextId,Type)
    Метод InputBox является методом объекта Application, и поэтому здесь присутствует слово Application. Аргументы этогометода, кроме
    Type, такие же, как и у функции InputBox. Основное отличие синтаксиса метода InputBox от синтаксиса одноименной функции заключается в по- следнем аргументе Type. Необязательный аргумент Type позволяет явно указать тип возвращаемого значения. В приведённой ниже таблице со- держатся значения, которые может принимать этот аргумент.
    Значения аргумента Type
    Значение
    Возвращаемое значение
    0
    Формула
    1
    Число
    2
    Текст (строка)
    4
    Логические значения, такие как ИСТИНА и ЛОЖЬ
    8
    Ссылка на ячейку
    16
    Значение ошибки
    64
    Массив значений
    Пример
    Sub Пример()
    Dim Данное As Integer
    Данное = Application.InputBox("Введите число:", , , , , , , 1)

    44
    MsgBox "Введённое данное равно " & Данное
    End Sub
    Запятые в выражении Application.InputBox указывают места пропущенных аргументов.
    Последний аргумент – Type имеет значение 1. Это показыва- ет, что допустимыми вводимыми значениями являются только числа.
    Преимуществом метода InputBox является возможность обнаружения ошибок при вводе данных. Например, если при выполнении процедуры
    Пример введено не число, то будет выведено следующее сообщение об ошибке:
    Можно суммировать значения аргумента Type. Например, если нуж- но, чтобы метод мог возвращать как текст, так и числа, следует сделать аргумент Type равным 3 (1 + 2). Если аргумент Type не задан, то метод
    InputBox по умолчанию возвращает текст.
    Пример
    Sub ФункцияInputBox2()
    Dim Данное As Variant
    Данное = Application.InputBox("Введите данное:", , , , , , , 3)
    MsgBox "Введённое данное равно " & Данное
    End Sub
    Пропуск отмечающих запятых, а также перестановка аргументов функции приводит к ошибкам несовпадения типов. Для предотвращения ошибок программирования функций при вводе аргументов VBA предос- тавляет возможность передавать значения аргументов функции, исполь- зуя именованные аргументы функций. Приведённая ниже процедура При-
    мер2 иллюстрирует использование именованных аргументов функций
    Prompt, Title и Type; она решает ту же задачу, что и процедура Пример.
    Sub Пример2()
    Dim Данное As Integer
    Данное = Application.InputBox(Promp t:= "Введите число:", _
    Title:="Проверка типа данных", Type:=1)
    MsgBox Prompt := "Введённое данное равно " & Данное, _
    Title:="Проверка ввода данных"
    End Sub
    Следует обратить внимание на то, что:
     имя аргумента отделяется от его значения символом “:=” (двоето-
    чие и равно);
     порядок перечисления именованных аргументов не обязательно совпадает с их порядком в формате функции;

    45
     список аргументов функции MsgBox не заключается в скобки;
     в операторе Данное = Application.InputBox … функция InputBox ис- пользуется как метод приложения Application, и поэтому её аргу- менты заключаются в скобки.
    Ниже приведены результаты выполнения процедуры Пример2.
    2.9.4.
    Объединение текстовых строк
    Если надо объединить несколько текстовых строк в одну, использу- ется символ конкатенации &. Его применение, а также применение других символьных констант, используемых при выводе сообщений, на экран по- казано в приведённой ниже процедуре ОбъединениеСтрок.
    Sub ОбъединениеСтрок()
    Dim Имя As String
    Dim Сообщение As String
    Имя = InputBox("Введите ваше имя: ")
    'Следующая строка для окна сообщения объединяет 'слово "Привет" со значением переменной Имя
    MsgBox "Привет, " & Имя & "!"
    Сообщение = "Это пример объединения нескольких"
    Сообщение = Сообщение & " строк в одну большую"
    Сообщение = Сообщение & " строку." & vbNewLine
    Сообщение = Сообщение & "vbNewLine - константа, позволяющая"
    Сообщение = Сообщение & " начинать новую строку"
    MsgBox Сообщение
    End Sub
    Ниже приведены результаты выполнения процедуры ОбъединениеСтрок.

    46
    2.10. Концепция событий Excel
    Событие представляет собой действие, распознаваемое объектом, например, щелчок мышью или нажатие клавиши, перемещение мыши или выход из программы, для которого можно запрограммировать отклик, т.е. реакцию объекта на произошедшее событие. В этом случае говорят, что процедура обрабатывает событие. Процедура обработки события – это специально именованная процедура, которая запускается при возникнове- нии определённого события.
    Excel реагирует на большое количество событий. При возникновении определённого события Excel может запускать указанную процедуру об- работки. Примерами событий, распознаваемых Excel, являются:
     открытие и закрытие рабочей книги;
     активизация окна;
    активизация или деактивизация рабочего листа;
     ввод данных в ячейку или редактирование данных в ячейке;
     сохранение рабочей книги;
     щелчок на объекте;
     обновление данных на диаграмме;
     нажатие определённой клавиши или сочетание клавиш;
     двойной щелчок на ячейке;
     наступление определённого времени суток.
    Обработать можно события следующих объектов Excel:
     Application
     WorkBook
     WorkSheet
     Chart
     UserForm.
    2.10.1. Типы событий Excel
    Excel в процессе работы может управлять большим количеством со- бытий, которые могут быть классифицированы следующим образом.
     События объекта Application происходят в приложении Excel. На- пример, событие WorkbookBeforeClose, возникает при закрытии одной из рабочих книг.
     События объекта WorkBook происходят в конкретной рабочей кни- ге. Например, событие Open, возникает при открытии или создании рабочей книги.
     События объекта WorkSheet происходят в конкретной рабочем листе. Например, событие Change, возникает при изменении со- держимого ячейки листа.
     События объекта UserForm происходят в диалоговом окне
    UserForm или в одном из объектов этого диалогового окна. Напри- мер, элемент управления CommandButton, расположенный в диа- логовом окне UserForm, поддерживает событие Click, возникающее при щелчке на этой кнопке.

    47
     События, не связанные с объектами: OnTime и OnKey. Эти собы- тия работают иначе, чем остальные.
    Каждая процедура обработки события имеет своё предопределённое имя, задаваемое в соответствии со следующим форматом
    Объект_Событие
    т.е. состоит из имени объекта и наименования события, разделённых сим- волом “подчёркивание” (_).
    Примеры
     WorkBook_Open
     Workbook_SheetActivate
     Worksheet_SelectionChange
     Worksheet_BeforeRightClick
    Процедуры событий объекта WorkBook хранятся в модуле ЭтаКнига, объ- екта WorkSheet – в модулях Лист1, Лист2, Лист3, объекта UserForm – в модулях UserForm (Рис. 10).
    Рис. 10. Объекты Microsoft Excel
    В отличие от других событий, доступ к событиям OnTime и OnKey осуществляется при помощи методов OnTime и OnKey объекта
    Application. Они программируются при помощи инструкций, расположенных в модуле общего назначения Module1, Module2,…, Module№.
    2.10.2. События объекта Workbook
    События объекта Workbook происходят в пределах определённой рабочей книги. Их количество равно 23. Ниже приведена таблица, в кото- рой перечислены наиболее часто используемые события объекта Work-
    book и краткое их описание.
    Таблица события объекта Workbook
    Событие
    Действие, к которое приводит к возникновению события
    BeforeClose
    Начало закрытия рабочей книги
    BeforePrint
    Перед началом печати рабочей книги
    BeforeSave
    Перед сохранением рабочей книги
    Open
    При открытии рабочей книги
    SheetActivate
    При активизации рабочего листа

    48
    Список событий можно просмотреть, как показано на рис. 11, 12 и 13.
    Для получения справки по событию нужно ввести его имя в поле справки “Ведите вопрос”, например, BeforePrint, нажать клавишу Enter и выбрать BeforePrint Event. На экран будет выведена справка по этому со- бытию.
    BeforePrint Event
    See Also Applies To
    Example
    Specifics
    Occurs before the workbook (or anything in it) is printed.
    Private Sub Workbook_BeforePrint(Cancel As Boolean)
    Cancel False when the event occurs. If the event procedure sets this argument to True, the workbook isn't printed when the procedure is finished.
    Example
    This example recalculates all worksheets in the active workbook before printing any- thing.
    Private Sub Workbook_BeforePrint(Cancel As Boolean)
    For Each wk in Worksheets wk.Calculate
    Next
    End Sub
    Код процедуры обработки события можно ввести полностью вруч- ную. Однако объявление этой процедуры лучше сделать при помощи ре- дактора VBE. Для этого нужно открыть редактор Visual Basic (клавиши
    Alt + F11 или кнопка
    ), выбрать двойным щелчком мыши из Microsoft
    Excel Objects модуль ЭтаКнига (или Лист1 (2, 3)) и из раскрывающегося списка справа сверху General выбрать объект Workbook (или Worksheet)
    (рис.11) и щёлкнуть по нему. Появится диалоговое окно со “скелетом” про- цедуры обработки события Open() (рис. 12).
    Рис. 11. Выбор объекта для обработки события рабочей книги

    49
    Рис. 12. “Скелет” процедуры обработки события Open()
    Рис. 13. Выбор события SheetActive
    Для выбора другого события нужно раскрыть список событий и выбрать его, например, SheetActive (рис. 13).
    На экран будет выведено диалоговое окно со “скелетом” процедуры Work- book_SheetActivate (рис.14).
    Рис. 14. Процедуры Workbook_Open и Workbook_SheetActivate
    Процедуру Workbook_Open, если она не нужна, следует удалить.

    50
    Предположим, что процедура Workbook_SheetActivate должна выда- вать сообщение об имени активизируемого рабочего листа. Ниже приве- дён текст такой процедуры и диалоговое окно при активизации Листа3.
    Private Sub Workbook_SheetActivate(ByVal Sh As Object)
    MsgBox ("Активный лист-" & Sh.Name)
    End Sub
    Необходимо помнить, что процедуры обработки событий объекта
    Workbook должны находиться в модуле ЭтаКнига (
    ), а объекта
    Worksheet – в модулях Лист1, Лист2, Лист3.
    Как видно из рис. 14, процедуры обработки событий могут иметь ар- гументы. Аргумент Sh в приведённой выше процедуре представляет акти- визированный рабочий лист. В данном случае переменная Sh имеет тип
    Object.
    Примечание
    Как для любой переменной VBA в приведённом выше примере вместо Sh можно использовать любое другое допустимое имя, например, Имя_Листа.
    Некоторые процедуры обработки событий используют аргумент
    Cancel с типом данных Boolean. В приводимой ниже процедуре значение аргумента Cancel, которое передаётся в процедуру, равно False, т.е. пе- чать разрешена (Cancel= False означает, что отмена не действует). Одна- ко можно установить это значение равным True, что приведёт к отмене пе- чати.
    Private Sub Workbook_BeforePrint (Cancel As Boolean)
    Сообщение = "Бумага загружена?"
    Ответ = MsgBox(Сообщение, vbYesNo, "Печать")
    If Ответ = vbNo Then Cancel = True
    End Sub
    Процедура Workbook_BeforePrint выполняется при выдаче команды на печать. Она отображает окно сообщения, приведённое ниже. если пользователь щёлкнет по кнопке Нет (константа vbNo), то аргумент
    Cancel примет значение True, и печать будет отменена.

    51
    В следующей процедуре выводится диалоговое окно с именем акти- вируемого листа. Процедура выполняется при смене активного листа.
    Private Sub Workbook_SheetActivate(ByVal Имя_Листа As Object)
    ("Имя активируемого листа - " & Имя_Листа.Name)
    End Sub
    2.10.3. События объекта Worksheet
    События объекта Worksheet относятся только к конкретным рабочим листам, для которых имеются модули листа: Лист1 (Лист1), Лист2 (Лист2) и т.д. Ниже приведена таблица наиболее часто используемых событий объекта Worksheet.
    Событие
    Действие, к которое приводит к возникновению события
    Activate
    Активизация рабочего листа
    BeforeDoubleClick Дойной щелчок на рабочем листе
    BeforeRightClick
    Щелчок правой кнопкой мыши на рабочем листе
    SelectionChange
    Перемещение курсора на рабочем листе
    Пример
    Приводимая ниже процедура выполняется при изменении значения данного в какой-либо ячейке рабочего листа, в модуле которого хранится эта процедура.
    Private Sub Worksheet_Change (ByVal Target As Range)
    MsgBox "Диапазон " & Target.Address & " изменился"
    End Sub
    Если будет изменено данного в ячейке A2, то на экран будет выведено следующее диалоговое окно:
    Пример
    Следующая процедура выполняется при щелчке правой кнопкой мыши на рабочем листе. Она используется, если необходимо отключить появление контекстного меню на рабочем листе. В ней устанавливается значение аргумента Cancel равным True, что приводит к отмене обработки

    52
    события BeforerightClick, и появление контекстного меню в текущем рабо- чем листе отменяется.
    Private Sub Worksheet_BeforerightClick _
    (ByVal Target As Excel.Range, Cancel As Boolean)
    Cancel = True
    MsgBox "Контекстное меню недоступно"
    End Sub
    При щелчке правой кнопкой мыши на рабочем листе, в модуле которого хранится эта процедура, будет выведено следующее диалоговое окно:
    2.10.4. События объекта Application
    К событиям уровня Application следует обращаться, когда нужно про- контролировать возникновение событий для всех открытых рабочих книг или рабочих листов. Для этого необходимо создать новый модуль класса.
    Необходимость использования этих событий возникает довольно редко, и в настоящей работе эти события не рассматриваются.
    2.10.5. События объекта UserForm
    Эти события будут рассмотрены при изложении технологии работы с пользовательскими формами.
    2.10.6. События, не связанные с конкретными объектами
    Рассмотренные выше события связаны с объектами: Application,
    WoorkBook, Sheet и т.д. В этом пункте описаны события, которые не свя- заны с определёнными объектами: OnTime и Onkey. Доступ к ним произ- водится с помощью методов объекта Application. Другими словами, на- стройка событий OnTime и OnKey осуществляется с помощью методов
    OnTime и Onkey.
    В отличие от событий, рассмотренных выше, события OnTime и
    Onkey программируются с помощью инструкций, расположенных в модуле кода общего назначения: Module1, Module2 и т.д.
    2.10.6.1. Метод OnKey
    Метод OnKeyустанавливает выполнение указанной процедуры при нажатии заданной комбинации клавиш.
    Формат метода
    OnKey (Key, Procedure), где

    53
    Key – обязательный параметр, задающий строку, определяющую комбинацию клавиш, которая должна быть нажата. В этой строке можно также указывать специальные клавиши, используя коды.
    Procedure – необязательный параметр, задающий имя процедуры, выполняемой при нажатии указанной в Key комбинации клавиш. Если па- раметр опущен, то выполняется действие, которое зарезервировано в сис- теме за этой комбинацией клавиш. Допустимо использование одновре- менно нажатой специальной клавиши и клавиши модификатора.
    В таблице, приведённой ниже, указаны коды некоторых специальных клавиш и клавиш модификаторов.
    Специальная клавиша
    Код
    От F1 до F15
    От {F1} до {F15}
    {LEFT}
    {RIGT}
    {DOWN}
    {UP}
    End
    {END}
    Insert
    { INSERT}
    Клавиша-модификатор
    Код
    Shift
    +
    Ctrl
    ^
    Alt
    %
    Пример
    В следующем примере для вызова процедуры Пример1назначена клави- ша F1, а для процедуры Пример2 – комбинация клавиш Ctrl и Стрелка вверх ( ). Назначение клавиш этим процедурам производится в процедуре
    Setup_OnKey, которая автоматически вызывается процедурой автозапуска
    Auto_Open при загрузке рабочей книги Excel. Это необходимо для назна- чения клавишей процедурам.
    Sub Auto_Open()
    Call Setup_OnKey
    'MsgBox "AUTO_EXEC"
    End Sub
    Sub Setup_OnKey()
    Application.OnKey "{F1}", "Пример1"
    Application.OnKey "{UP}", "Пример2"
    End Sub
    Sub Пример1() d = "Дата " & Date
    MsgBox "Переназначение клавиш_1" & Chr(13) & "Дата " & Date & Chr(13) &
    "Клавиша F1"

    54
    End Sub
    Sub Пример2()
    MsgBox "Переназначение клавиш_2" & Chr(13) & "Клавиши Ctrl и Стрелка вверх"
    End Sub
    Ниже приведены диалоговые окна, выводимые в рассматриваемом при- мере.
    2.10.6.2. Событие OnTime
    Событие OnTime происходит в заданное время суток. Доступ к нему производится с помощью метода объекта Application OnTime. В приведён- ной ниже процедуре ИнтервалВремени осуществляется вызов процедуры
    ВыходПоВремени через 45 минут от момента её вызова, т.е. текущего времени, которое задаётся функцией Now. Функция TimeValue преобразу- ет строковое значение аргумента (в нашем случае "00:45:00") в формат времени (45 минут).
    Sub ИнтервалВремени()
    Application.OnTime Now + TimeValue("00:45:00"), "ВыходПоВремени"
    End Sub
    В процедуре ВыходПоВремени строка Ваше время истекло! Помещается в ячейку E5 Листа2, и его содержимое (параметр Contents) защищается от изменений (использован метод Protect).
    Sub ВыходПоВремени()
    Sheets("Лист2").Range("E5").Value = "Ваше время истекло!"
    Sheets("Лист2").Protect Contents:=True
    End Sub
    2.11. Формы пользователя
    Формы пользователя – это диалоговые окна, предназначенные для создания собственного интерфейса при работе с программными модулями проекта, используя объект UserForm. При помощи форм пользователя
    VBA , которые называются также экранными формами, можно создавать диалоговые окна для вывода данных или получения значений от пользо- вателя в виде, требуемом программе пользователя. Хотя во многих случа- ях для этих целей можно применять функции MsgBox и InputBox (или ме- тод InputBox), при разработке сложных проектов возможности их недоста- точны. В экранных формах пользователя можно в одном диалоговом окне

    55
    задавать сразу несколько опций, выбирать пункты из списка или вводить несколько значений, наподобие диалоговым окнам приложений MS Office.
    Для вставки экранной формы в приложение нужно выполнить сле- дующие действия.
    1. Открыть рабочую книгу.
    2. Войти в редактор Visual Basic, нажав комбинацию клавиш
    или щёлкнув по кнопке
    3. Если в окне проекта не появится окно Project – VBAProject, то вы- брать в меню View пункт Project Exsplorer.
    4. В окне проекта щёлкнуть правой кнопкой мыши на элементе
    ЭтаКнига.
    5. В контекстном меню выполнить команду Insert>UserForm (Вставка >
    Экранная форма). В рабочую книгу будет вставлена экранная форма
    UserForm1 и Панель элементов ToolBoox (рис.15).
    Рис. 15.
    Вставленная новая экранная форма
    Новая экранная форма представляет собой пустое окно со строкой заголовка UserForm1. Это та основа, на которой пользователь может соз- дать собственные диалоговые окна и окна других типов. Если панель
    ToolBoox не появится, нужно выбрать в меню View пункт ToolBoox или на- жать кнопку на панели Microsoft Visual Basic.
    1   2   3   4   5   6   7   8   9   ...   13


    написать администратору сайта