ecosafe Образование Окружающая среда Природные условия Опасные природные явления Красная книга
Биоразнообразие Охраняемые территории Библиотека О проекте Новости

Visual Basic для MS Excel - Введение
Содержание курса

Язык Visual Basic для MS Excel (далее VB) является объектно-ориентированным языком высокого уровня. Он обладает большим набором средств базового языка, и, кроме того, имеет много расширений, позволяющих получить доступ к возможностям электронных таблиц. Далее VB рассматривается в основном применительно к пакету MS Office 97. Изложение краткое, поэтому некоторые моменты упомянуты, но не рассматриваются. При работе в редакторе VB легко получить подсказку, установив курсор на интересующем Вас слове и нажав F1.

Для того, чтобы начать работу с VB, следует перейти в редактор (Сервис – Макрос - Редактор). При этом Вы попадаете в окно редактора, а точнее, интегрированной среды разработчика. Если установки стандартные, под главным меню и панелями инструментов слева находится окно проекта. В нем видно содержание текущей рабочей книги. Для того, чтобы начать работу, нужно активизировать меню Вставка – Модуль. При этом в окне проекта появится папка модуля и правее появится окно программного кода, пока чистое.
Программа на VB состоит из одного или нескольких модулей. Эти модули могут находится как в текущей, так и в других рабочих книгах. Модуль состоит из:

    Описания опций;
    Описания констант и переменных;
    Подпрограмм двух типов – процедур и функций.

В свою очередь, в каждой подпрограмме может быть свой раздел описания переменных.

VB содержит всего 4 опции: Private, Compare, Base и  Explicit. Не останавливаясь на первых трех (напомним, что подсказку легко получить), отметим, что option explicit определяет явное описание переменных. Это позволяет избежать многих ошибок. Если этого не сделать, VB будет вводить новые переменные, если Вы ошиблись при записи их в тексте программы (например, написали My_vr вместо My_var). Кроме того, если переменная явно не описана, VB использует для нее тип Variant, работа с которым требует больших затрат ресурсов; например, при операциях с ним необходимо каждый раз выполнять преобразование типа. По умолчанию явное описание переменных не требуется.

 Описание констант начинается с ключевого слова Const. Отметим, что при написании операторов, имен и т.д. регистр неважен - после окончания ввода строки автоматически переписываются с правильной расстановкой регистра. Это позволяет упростить ввод программы - если ее элемент после ввода не переписался правильно, следует искать ошибку в тексте.

Описание переменных начинается с ключевого слова Dim (также Public, Privite, Static – F1) после которого идет описание переменных, т.е. их принадлежности к типу: Boolean, Byte, Integer, Long, Currency, Single, Double, Date, String, Object, Variant. C помощью инструкции Type возможно также определить свой собственный тип. Каждую переменную необходимо описать отдельно. В следующим примере описаны две переменные типа Integer и один массив переменных того же типа:

    Dim intX As Integer, intY(100) As Integer, intZ As Integer

А в следующим примере описаны одна переменная типа Integer и одна – типа Variant:

    Dim intX, intY As Integer

Для преобразования типов служат специальные функции, начинающиеся с символа C - например, функция CInt приводит аргумент к типу Integer.

Подпрограммы бывают двух типов – процедуры и функции. Особенностью первых является то, что они могут быть созданы через опцию Начать запись, т.е. без непосредственного написания текста программы. Функции могут быть написаны только в редакторе VB.

Процедуры начинаются с  ключевого слова Sub и заканчиваются End Sub. Последнее VB записывает автоматически.

Таким образом, простейший модуль, предназначенный для вычисления площади круга c радиусом, равным 2, может выглядеть так:

Option Explicit

Const Pi As Double = 3.14159
Dim Rad As Double, Sqr As Double

Sub First()
 Rad = 2
 Sqr = Pi*Rad*Rad
End Sub

Отметим, что после имени процедуры обязательны круглые скобки, даже если она не содержит параметров.
Передача параметров в процедуры и функции может осуществляться как с помощью глобальных переменных, так и формальных параметров. В следующим примере вычисление площади круга осуществляется функцией Sqr, а радиус передается в нее с помощью формального параметра Arg:
 

Option Explicit

Const Pi As Double = 3.14159
Dim Rad As Double Square as Double

Function MySqr(Arg As Double) As Double
 MySqr = Pi*Arg*Arg
End Function

Sub First()
 Rad = 2
 Square = MySqr(Rad)
End Sub


В первой строке описания функции в скобках описан параметр, а после скобок – тип возвращаемогло результата.

В данном коротком описании остается добавить, что как внутри модуля, так и между ними вызов подпрограмм другими подпрограммами никак не связан с порядком описания внутри модуля – например, выше или ниже по тексту; вложения подпрограмм не допускается. С помощью директивы Private можно запретить вызов подпрограмм и переменных из других модулей; однако представляется, что  если просмотр модуля посторонними нежелателен, проще его вообще спрятать (Сервис – свойства - Защита) – тогда имя подпрограмм этим посторонним вообще неизвестно.

Управляющие операторы VB соответствуют базовому языку, многие пришли из Basic для DOS. Так, оператор проверки условия:
 

If Number < 10 Then
 Digits = 1
ElseIf Number < 100 Then
 Digits = 2
Else
 Digits = 3
End If


Здесь ElseIf может отсутствовать. Другой оператор выбора:
 

Select Case Number
Case 1 To 5
 Debug.Print "Число 1 - 5"
Case 6, 7, 8
 Debug.Print " Число 6 - 8."
Case Is > 8 And Number < 11
Debug.Print "Больше 8"
Case Else
 Debug.Print "Вне интервала 1 -- 10"
End Select


Здесь Debug – вывод значения в режиме отладки.
Цикл по переменной образуется оператором For…Next:
 

 For i=1 to 10
  Beep
 Next i


При выполнении данного цикла компьютер пищит десять раз. Для организации циклов с проверкой на входе или на выходе используется  конструкция Do…Loop:
 

 Do While Counter < 10
  Counter = Counter + 1
 Loop


Отметим, что как после Do, так и после Loop возможно указать директивы While либо Until, что позволяет сформировать различные типы условий.
Полное описание всех инструкций VB можно найти в справочной системе редактора в разделе Инструкции.
Перейдем теперь к описанию связи между рабочей книгой и программой. В простейшем случае можно использовать встроенные функции InputBox (для ввода данных) и MsgBox (для вывода на экран). Простейший пример:
 

Sub example()
    myval = InputBox("Введите что-нибудь", "Пример")
    response = MsgBox(myval)
End Sub


Но гораздо больший интерес представляет организация связи между рабочими листами и переменными программы.
Как уже говорилось, Basic является объектно ориентированным языком. Объектами диалектов Basic’a для приложений являются элементы этих приложений. Так, для MS Excel это будут рабочие книги, листы, элементы управления и т.д. Каждый объект имеет свойства (например, параметры шрифта, с помощью которого на рабочий лист выводится информация) и методы (например, чтобы показать лист на экране, используют метод Show).
Иерархия объектов MS Excel выглядит следующим образом:
MS Excel - pабочая книга – рабочий лист –   ячейка листа (диапазон ячеек)
- элементы управления
- диалоги
- панели инструментов

На языке VB элементы рабочей книги называются так:
Application – Workbook – Worksheet – Cell(Range)
- forms
- userform
- toolbar

Обращение к объекту осуществляется указанием его позиции в иерархической структуре – например, чтобы обратиться к ячейке B2 листа list1 книги My следует сказать:

Application.Workbooks(“My”).Worksheets(“list1”).Range(“B2”)

В реальной программе Application (Ms Excel) и Workbook (My) можно не указывать. Пример фрагмента программы, присваивающей переменной x значение, хранящееся в ячейке B2 листа list1:
 

x = Worksheets(“list1”).Range(“B2”).value


Здесь .value – свойство объекта Worksheets(“list1”).Range(“B2”), т.е. содержимое ячейки.
В следующих фрагментах программ представлены другие варианты обмена данными между рабочими листами и переменными программы:
 

For i=1 to 10
  Worksheets(“list1”).Cells(6).Rows(i).value = x(i)
 Next i


В данном случае в первые 10 столбцов строки 6 листа list1 будут записаны значения переменных массива x.
Иногда бывает необходимо присвоить массиву переменных значения из выделенного фрагмента листа:
 

Sub InputData()
    Dim c As Object
    i = 0
    For Each c In Selection
        If IsNumeric(c.Value) Then
            i = i + 1
            y(i) = c.Value
        Else
            Msg = "Значения должны быть числами!"
            Response = MsgBox(Msg)
            Exit For
        End If
    Next c


Интересно отметить, что Selection, которое интерпретируется справочной системой VB как свойство (property) в данном случае является скорее объектом. Известно, что различие между свойствами и методами также достаточно условно.

Основное правило при изучении программирования на любом языке - надо работать практически !

В начало страницы