АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Диалоговый ввод - вывод в VBA

Читайте также:
  1. Анализ результатов и выводы
  2. Анализируя результаты анкетирования можно сделать выводы.
  3. Аналоговый вывод
  4. Билет26(можно только выводы в конце учить).
  5. Более широкие выводы
  6. В отличие от почек, которые выводят с мочой из организма преимущественно нейтральные соли, кожа способна выводить сами кислоты.
  7. В процессе вывода знака на экран компьютера производится обратное перекодирование, т. е. преобразование двоичного кода знака в его изображение.
  8. Ввод и вывод информации
  9. Ввод, вывод вектора и матрицы
  10. Ввод-Вывод
  11. Ввод-вывод двухмерного массива
  12. Ввод/вывод аналоговых сигналов

Любая процедура состоит из трех частей: ввода, выполнения и вывода. Ввод — это информация, необходимая для выполнения процедуры; вывод — это то, что получилось в результате выполнения процедуры.

Свойства объектов, значения ячеек и значения переменных — все это примеры ввода. Данные ввода можно получить во время выполнения процедуры от пользователя. Это называется пользовательским вводом.

Наиболее простая форма пользовательского ввода — это щелчок на кнопке в окне сообщения. Немного сложнее — это ввод одного значения в поле ввода диалогового окна.

 

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

 

Константа Значение Описание
VbOKonly   Выводит кнопку ОК
VbOKCancel   Выводит кнопки ОК и Отмена
VbAbortRetryIgnore   Выводит кнопки Прекратить, Повторить и Игнорировать
VbYesNoCancel   Выводит кнопки Да, Нет и Отмена
VbYesNo   Выводит кнопки Да и Нет
VbRetryCancel   Выводит кнопки Повторить и Отмена
VbCritical   Выводит пиктограмму Critical Message (Критическое сообщение)
VbQuestion   Выводит пиктограмму Question mark (Предупреждающий запрос)
VbExclamation   Выводит пиктограмму Exclamation (Предупреждение)
VbInformation   Выводит пиктограмму Information
VbDefaultButton1   Принимает по умолчанию первую кнопку
VbDefaultButton2   Принимает по умолчанию вторую кнопку
VbDefaultButton3   Принимает по умолчанию третью кнопку
VbApplicationModal   Excel прекращает работу закрытия окна сообщения
VbSystemModal   Приостанавливается работа всех приложений до закрытия окна сообщения

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

Аргумент 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

Константа Значение Нажатая кнопка
VbOK   ОК
VbCansel   Отмена
VbAbort   Прервать
VbRetry   Повторить
VbIgnore   Пропустить
VbYes   Да
VbNo   Нет

Следующий пример кода выводит окно сообщения с кнопками Да и Нет. Если пользователь щелкнет на кнопке Да, то появится другое окно сообщения с надписью "Продолжаю... ". Если пользователь щелкнет на кнопке Нет, появится сообщение "Процесс прерван". Второй аргумент использует 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 часа”)

 


1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 |

Поиск по сайту:



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.013 сек.)