Введение в Basic/VisualBasic

Область видимости переменных, ввод-вывод.

1. GENERAL DECLARATIONS

Программа на языке VBA имеет модульную структуру - главный модуль, в составе которого вложенные модули, содержащие одну или более вложенных процедур. Каждый модуль имеет раздел объявлений (когда в верхних списках показываются значения (General) (Declarations)). В разделе объявлений модуля могут быть только объявления переменных уровня модуля и некоторые специальные инструкции для компилятора. Весь остальной программный код должен находиться внутри процедур.

1.а) Option Explicit  - к вопросу о некоторых специальных инструкциях  компилятора

Инструкция Option Explicit заставляет разработчика явно объявлять все переменные. При попытке использования неописанного имени переменной возникает ошибка во время компиляции. Инструкция Option Explicit используется только на уровне модуля.


1.b) Область видимости переменных:

  В VBA предусмотрено 4 ключевых слова для определения области видимости переменных:

    Dim — локальные переменные, используется в большинстве случаев. Изначально определена как локальная переменная уровня процедуры. Но можно объявлять и в модулях. Если переменная объявлена как Dim в области объявлений модуля, она будет доступна во всем модуле, если в процедуре — только на время работы этой процедуры; Static — такие переменные можно использовать только внутри процедуры. Эти переменные видны только внутри процедуры, в которой они объявлены, зато они сохраняют свое значение между разными вызовами этой процедуры. Обычно используются для накопления каких-либо значений. Static  - сохраняет свое значение по выходу из процедуры, пока работает программа.
    Private — переменные уровня модуля;  при объявлении переменных в VBA значит то же, что и Dim; Объявление переменной на уровне модуля делает ее доступной для всех процедур модуля. При этом допускается переопределение имени переменной во вложенных процедурах. Теряют свое значение по выходу из процедуры.

    Public — глобальная переменные уровня внешнего модуля, такая переменная будет доступна всем процедурам во всех модулях данного проекта. Если вы объявили ее внутри процедуры, она будет вести себя как Dim/Private;

НЕ нашли? Не то? Что вы ищете?

2. Встроенные диалоговые окна MsgBox, InputBox.

В программном коде на VBA ввод и вывод организуется с помощью встроенных диалоговых окон:

-- окно ввода  (функция InputBox) обеспечивает ввод информации

-- окно сообщений (процедура MsgBox) выводит простейшие сообщения для пользователя

2.а) MsgBox (prompt, [, button][, title] [, helpfile, context])

prompt – строковое выражение, отображаемое как сообщение в диалоговом окне.

button – числовое выражение, представляющее сумму значений, которые указывают число и тип отображаемых кнопок, тип используемого значка (писать через +), основную кнопку. Значение этого аргумента по умолчанию равняется 0.

Значения аргумента, определяющие отображаемые кнопки:

Константа

Значение

Отображаемые кнопки

VbOKOnly

VbOKCancel

VbAbortRetryIgnore

VbYesNoCancel

VbYesNo

VbRetryCancel

0

1

2

3

4

5

OK

OK, Отмена

Стоп, Повтор, Пропустить

Да, Нет, Отмена

Да, Нет

Повтор, Отмена

Значения аргумента, определяющие отображаемые значки

Константа

Значение

Значок сообщения

VbCritical

VbQuestion

VbExclamation

VbInformation

16

32

48

64

Значения аргумента, определяющие основную кнопку окна

Константа

Значение

Номер основной кнопки

VbDefaultButton1

VbDefaultButton2

VbDefaultButton3

VbDefaultButton4

0

256

512

768

1

2

3

4

title – строковое выражение, отображаемое в строке заголовка диалогового окна. Если этот аргумент опущен, в строку помещается имя приложения.

helpfile – строковое выражение, определяющее имя файла справки, содержащего справочные сведения о данном диалоговом окне. Если этот аргумент указан, необходимо также наличие аргумента context.

context – числовое выражение, определяющее номер соответствующего раздела справочной системы. Если этот аргумент указан, необходимо также наличие аргумента helpfile.

Процедура MsgBox выводит на экран диалоговое окно, содержащее сообщение, устанавливает режим ожидания нажатия кнопки пользователем. Затем возвращает значение типа Integer, указывающее, какая кнопка была нажата.

Для использования этого свойства нужно запомнить в переменную значение MsgBox

nAnswer = MsgBox("Значение c=" & c, vbOKCancel + vbCritical + vbDefaultButton2)


Значение

Нажатая кнопка

1

OK

2

Отмена

3

Стоп

4

Повтор

5

Пропустить

6

Да

7

Нет

2.b) InputBox (promt, [, title] [, default] [, xpos] [, ypos] [, helpfile, context])

InputBox (promt, [, title] [, default] [, xpos] [, ypos] [, helpfile, context])

Аргументы:

prompt – строковое выражение, отображаемое как сообщение в диалоговом окне.

title – строковое выражение, отображаемое в строке заголовка диалогового окна. Если этот аргумент опущен, в строку помещается имя приложения.

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

xpos – числовое выражение, задающее расстояние по горизонтали между левой границей диалогового окна и левым краем экрана. Если этот аргумент опущен, диалоговое окно выравнивается по центру экрана по горизонтали.

ypos – числовое выражение, задающее расстояние по вертикали между верхней границей диалогового окна и верхним краем экрана. Если этот аргумент опущен, диалоговое окно помещается по вертикали примерно на одну треть высоты экрана.

helpfile – строковое выражение, определяющее имя файла справки, содержащего справочные сведения о данном диалоговом окне. Если этот аргумент указан, необходимо также наличие аргумента context.

context – числовое выражение, определяющее номер соответствующего раздела справочной системы. Если этот аргумент указан, необходимо также наличие аргумента helpfile.

Функция InputBox выводит на экран диалоговое окно, содержащее сообщение и поле ввода, устанавливает режим ожидания ввода текста пользователем или нажатия кнопки. Затем возвращает значение типа String, содержащее текст, введенный в поле.

c = InputBox(c)