|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Диалоговый ввод - вывод в VBAЛюбая процедура состоит из трех частей: ввода, выполнения и вывода. Ввод — это информация, необходимая для выполнения процедуры; вывод — это то, что получилось в результате выполнения процедуры. Свойства объектов, значения ячеек и значения переменных — все это примеры ввода. Данные ввода можно получить во время выполнения процедуры от пользователя. Это называется пользовательским вводом. Наиболее простая форма пользовательского ввода — это щелчок на кнопке в окне сообщения. Немного сложнее — это ввод одного значения в поле ввода диалогового окна.
4.1.1 Окно сообщения С помощью окна сообщения функции MsgBox() вы можете задать вопрос, а затем, в зависимости от ответа, выполнить то или иное действие. Функция MsgBox() имеет пять аргументов: MsgBox(Prompt:=[, Buttons:=] [, Title:=] [, HelpFile:=, Context:=]) АргументPrompt определяет сообщение, которое появится в диалоговом окне. Наберите текст (в кавычках). Используйте переменную типа string или объединенные строковые переменные и строки со значком &, например: “Этот экран высотой в "& AppIication.UsableHeight &" точек" АргументButtons определяет, какие кнопки появятся в окне сообщения. Укажите их, используя такие константы, как vbExclamation или vbOK. Эти константы VBA представляет как числа. Хотя вместо констант можно применять числа для обозначения кнопок, однако рекомендуем использовать константы, поскольку при этом вы получите легко читаемый код. Параметры аргумента Button можно разделить на несколько групп. Две наиболее важные — это пиктограммы и кнопки. В окне сообщения вы можете поместить четыре типа пиктограмм и шесть типов кнопок. Другие параметры определяют, какая кнопка считается нажатой по умолчанию и работа какого приложения приостанавливается, когда появляется диалоговое окно, – только Excel или вообще всех приложений. В таблице 4.1 приведены эти параметры.
Таблица 4.1 – Значения константы аргумента Button функции MsgBox
Для того чтобы в окне сообщения отобразилось несколько кнопок, соедините константы знаком «плюс». Нельзя вывести в окне сообщения две пиктограммы, но можно управлять как пиктограммой, так и типом появляющихся кнопок. Окно сообщения появляется всегда только в центре экрана. Если никакая другая кнопка не указана, в окне сообщения отображается только кнопка ОК. Аргумент Title определяет заголовок окна сообщения. Как и Prompt, этот аргумент должен быть строкой, строковой переменной или объединением строк и строковых переменных. Вы можете не указывать этого аргумента, тогда по умолчанию названием окна сообщения будет Microsoft Excel. Для того чтобы указать текущую справку, используйте четвертый и пятый аргумент (или проигнорируйте их). Аргумент HelpFile — имя файла справки, а аргумент Context указывает раздел в нем. Если вы указали один из этих аргументов, то должны указать и второй. При этом Excel автоматически добавит кнопку справки в окно сообщения. Следующий код отображает два окна сообщения: первое с заголовком — "Системн_информ" — содержит пиктограмму с восклицательным знаком и сообщение об используемой высоте экрана; второе с заголовком — "Системная информация" — содержит сообщение об используемой ширине экрана. Sub ShowMessageOK() MsgBox Prompt:=" Высота этого экрана составляет" _ & Application.UsableHeight & " точек", Buttons:=vbExclamation, Title:="Системн_информ" MsgBox "Ширина этого экрана " & Application.UsableWidth & _ " точек", vbInformation, "Системная информация" End Sub
4.2 Принятие решения
Очень просто вывести на экран несколько кнопок: используйте константы, указанные в таблице 3.1. Вы можете вывести окна сообщения с кнопками Да и Нет, кнопками Да, Нет и Отмена, а также кнопками Прекратить, Повторить, Игнорировать. Проанализировав в коде значение, возвращенное функцией MsgBox (таблица 4.2), можно определить, какая кнопка нажата, и направить выполнение программы по нужному пути. Таблица 4.2 – Значения, возвращаемые функцией MsgBox
Следующий пример кода выводит окно сообщения с кнопками Да и Нет. Если пользователь щелкнет на кнопке Да, то появится другое окно сообщения с надписью "Продолжаю... ". Если пользователь щелкнет на кнопке Нет, появится сообщение "Процесс прерван". Второй аргумент использует vbQuestion плюс vbYesNo: окно сообщения будет содержать знак вопроса и кнопки Да и Нет. Sub VoprosYesNo() Dim Indik As Integer Indik = MsgBox("Хотите продолжать?", vbQuestion + vbYesNo, "Вопрос пользователю") If Indik = vbYes Then MsgBox "Продолжаю...", vbInformation, "Системное сообщение" Else MsgBox "Процесс прерван", vbCritical, "Системное сообщение" End If End Sub В этом примере кода показаны два способа использования функции MsgBox. В первом случае круглые скобки ставятся сразу после слова MsgBox и после третьего аргумента. Это означает, что используется возвращаемое значение функции MsgBox. Следующие две функции не используют возвращаемого значения, поэтому круглые скобки не ставятся. Кнопки, расположенные в окне сообщения, определяют значение возвращаемой величины. Возвращаемое значение функции MsgBox является константой, которая начинается с vb и заканчивается словом, написанным на кнопке, например ОК или Отмена. Если в окне сообщения находятся кнопки Да и Нет, то функция MsgBox возвращает значение vbYes или vbNo. В данном коде переменная Indik равна результату функции MsgBox. Команда If проверяет, равняется ли значение Indik vbYes; если да, она выполняет соответствующие действия.
4.3 Окно ввода
Функция InputBox() немного сложнее, чем MsgBox(), и позволяет ввести реальное значение или текстовую строку. Поскольку InputBox() получает значение, её бессмысленно применять, не используя введенное значение. Поэтому эта функция всегда записывается с круглыми скобками. Функция InputBox() может иметь до семи аргументов: InputBox(prompt[, title] [, default] [, xpos] [, ypos] [, helpfile, context]) Необходимым является только первый — Prompt, в котором указывается сообщение в окне. Вторым является Title. Третьим – значение окна ввода, принимаемое по умолчанию. Четвертый и пятый аргументы указывают положение окна ввода. Если они пропускаются, окно будет располагаться посередине экрана. Шестой и пятый аргументы определяют файл справки и его раздел. Если вы используете один из них, то необходимо использовать и другой. Тогда Excel добавит к окну ввода кнопку Справка. Функция InputBox() всегда возвращает строку. Даже если пользователь введет число – в действительности это строка. В большинстве случаев VBA переводит строку в число. Однако иногда перевод осуществляется неправильно. В таком случае нужно перевести возвращаемое значение в другой тип данных. Используйте для этого одну из функций перевода, например функцию Сint (значение), которая переводит возвращаемое значение в целое число. Щелкая на кнопке Отмена, вы ожидаете, что возвращаемой величиной будет vbCancel. Однако это неверно. Поскольку InputBox() возвращает строку, щелчок на кнопке Отмена приведет к тому, что будет возвращена пустая строка (набор кавычек — ""). Рассмотрите следующий пример, если ничего не введено (пустая строка), то происходит выход из подпрограммы. Sub Vvod_lnputBox() Dim s As String, sreal As Single s = InputBox(Prompt:="Какая зарплата?:", _ Title:="Вопрос", Default: =550) If s = "" Then Exit Sub sreal = CSng (s) MsgBox "Зарплата составляет" & s & " налоги " & sreal * 0.13 End Sub Иногда необходимо, чтобы пользователь ввел только конкретный тип данных. В этом случае используйте метод InputBox() вместо функции InputBox(). Поставив Application. перед InputBox(), вы укажете VBA, что необходимо использовать метод Excel InputBox(), а не функцию VBA. У метода InputBox() имеется еще и восьмой аргумент — Type. Указав тип, вы тем самым требуете (от пользователя) ввести только определенный тип данных. Чтобы разрешить ввод нескольких типов данных, добавьте значения различных типов данных. Однако если вы используете метод InputBox(), щелчок на кнопке Отмена возвращает значение False, а не пустую строку.
4.4 Ввод-вывод при помощи ячеек Excel Для ввода исходных данных из конкретных ячеек рабочего листа Excel, а также для вывода результатов расчета в ячейки может быть эффективно применен объект ActiveCell. Объект Range используется для указания ячеек. Объект ActiveCell указывает на ячейку (или объект Range), который имеет фокус при вводе данных с клавиатуры. Для этого используется свойство Value. Например, в ячейку с адресом А5 необходимо записать значение переменной Rost: Range(“A5”).Select ActiveCell.Value = Rost Обратная процедура выполняется аналогично: Rost = ActiveCell.Value Если есть необходимость считывать большое число данных из различных ячеек, адреса которых можно вычислить, целесообразно использование метода Offset(R,C), где R – смещение на R строк вниз относительно строки активной ячейки, C – смещение на С столбцов вправо относительно столбца активной ячейки. Например, следующая строка записывает значение переменной Rost в ячейку В7: Range(“A5”).Select ActiveCell.Offset(2, 1).Value = Rost
Ниже приведен пример программы, обрабатывающей квадратную матрицу. Исходная матрица считывается с листа ListA, результаты располагаются там же. На рисунке 4.1 представлен протокол работы.
Рисунок 4.1 – Пример ввода-вывода данных через ячейки
Public Sub Cikle2() ' Ввод и вывод данных в цикле Dim Y(4, 4) As Single, Byfer As Single Dim i As Byte, j As Byte, imin As Byte, imax As Byte Dim maxim As Single Dim minim As Single Sheets("ListA").Select Range("a3").Select For i = 1 To 4 For j = 1 To 4 Y(i, j) = ActiveCell.Offset(i - 1, j - 1).Value Next j Next i maxim = Y(1, 1): minim = Y(1, 1) imin = 1: imax = 1 For i = 1 To 4 For j = 1 To 4 If Y(i, j) > maxim Then maxim = Y(i, j): imax = i End If If Y(i, j) < minim Then minim = Y(i, j): imin = i End If Next j Next i Range("A7:H20").Select Selection.Clear With Selection.Font .Name = "Times New Roman CYR" .Size = 14 End With Range("A7").Select If imin <> imax Then ActiveCell.Formula = "Результат - матрица c поменяными строками (max и min элементы)" For j = 1 To 4 Byfer = Y(imax, j) Y(imax, j) = Y(imin, j) Y(imin, j) = Byfer Next j For i = 1 To 4 For j = 1 To 4 ActiveCell.Offset(i, j - 1).Value = Y(i, j) Next j Next i Else ActiveCell.Formula = "Строки с минимумом и максимумом совпали" End If Range("A12").Select ActiveCell.Formula = "Mин=" ActiveCell.Offset(0, 1).Value = minim ActiveCell.Offset(0, 2).Formula = "Max=" ActiveCell.Offset(0, 3).Value = maxim End Sub Лекция №5 Структура кода VBA. Процедуры и функции
1. Пол Санна и др. Visual Basic для приложений (версия 5) в подлиннике: пер. с англ. –СПб.: BHV - Санкт-Петербург, 1999. –704с. 2. Справочная система Visual Basic for Excel. 3. Михаэль Райтингер, Геральд Муч. Visual Basic 6.0 для пользователя. пер.с нем. –К.: Издательская группа BHV, 1999. –416с. 4. Михаэль Райтингер, Геральд Муч. Visual Basic 6.0: пер.с нем. –К.: Издательская группа BHV, 2000. –288с. (серия “Библиотека студента”) 5. Грег Перри, Санжайа Хеттихева. Visual Basic 6: пер.с англ. –М.: ЗАО «Издательство БИНОМ», 1999. –384с. (серия “Освой самостоятельно за 24 часа”)
Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.013 сек.) |