Основы офисного программирования и язык VBA


Синтаксис объявления простых переменных - часть 2


Public Sub Finish() 'Заключительная печать Debug.Print "Finish: Fx = ", Fx, "Fy =", Fy, "Fz =", Fz Debug.Print "Mx =", Mx, "My =", My, "Mz =", Mz 'Объявления разных типов и печать значений, полученных при объявлении Dim B As Byte, I As Integer, L As Long Dim Sng As Single, D As Double, C As Currency Dim SF As String * 7, SV As String, Dat As Date Dim O As Object, V Debug.Print "B =", B, "I=", I, "L=", L Debug.Print "Sng =", Sng, "D =", D; "C=", C Debug.Print "SF =", SF, "SV =", SV, "Dat=", Dat If O Is Nothing Then Debug.Print "Объект не определен" If V = Empty Then Debug.Print "Variant переменные не инициализированы" End Sub

Пример 3.1.

Запустив процедуру Start модуля Father, мы получили такие результаты отладочной печати:

Father1: Fx= 12 Fy = 18 Fz = 1 Mother: Статическая переменная Count = 1 Father1: Fx= 14 Fy = 16 Fz = 1 Mother: Статическая переменная Count = 2 Father1: Fx= 16 Fy = 14 Fz = 1 Mother: Статическая переменная Count = 3 Finish: Fx =16 Fy = Fz = 2 Mx = 14 My = 0 Mz = B = 0 I= 0 L= 0 Sng = 0 D = 0 C= 0 SF = SV = Dat= 0:00:00 Объект не определен Variant переменные не инициализированы

Дадим краткий комментарий:

  • Процедуры Father и Mother трижды взаимно вызывают друг друга. Статическая переменная Count подсчитывает число сделанных обращений.
  • Процедура Father печатает значения глобальных переменных Fx, Fy и локальной переменной Fz. Заметьте, локальное объявление "сильнее" глобального.
  • Процедура Finish печатает заключительные значения переменных Fx, Fy, Fz, Mx, My и Mz. Здесь печатается значение глобальной переменной Fz, а значения двух переменных - Fy и Mz - не определены. Дело в том, что Fy - закрытая переменная модуля Father, а Mz вообще не объявлялась. И все же ошибки не возникает, так как действуют объявления по умолчанию и обе эти переменные считаются объявленными в модуле Mother и по умолчанию имеют тип Variant.Именно здесь кроется причина возможных ошибок, во избежание которых мы и советовали включить оператор Option Excplicit. Будь это сделано, - появились бы предупреждающие сообщения. У нас эти опции написаны, но специально закомментированы для демонстрации эффекта их отсутствия. Если их включить, то ошибка сразу встретится в процедуре Start -- ведь переменные My и Mz не определены в модуле Father.
  • Вторая часть процедуры Finish носит самостоятельный характер, - она демонстрирует объявления всех простых типов и печать значений, получаемых переменными при объявлении. Заметьте, как проверяется неопределенность объекта и пустота значений переменных.




Начало  Назад  Вперед



Книжный магазин