Программирование на языке vba

23
Программирование Программирование на языке на языке VBA VBA

Upload: daniel-mullen

Post on 01-Jan-2016

113 views

Category:

Documents


1 download

DESCRIPTION

Программирование на языке VBA. VBA - Visual Basic for Applications. это объектно-ориентированный язык программирования. Основные понятия. объект семейство метод класс свойство событие объектная модель. Объектные модели Microsoft Office 2002. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Программирование на языке  VBA

Программирование на Программирование на языке языке VBAVBA

Page 2: Программирование на языке  VBA

VBA - VBA - Visual Basic for Applications Visual Basic for Applications

это объектно-ориентированный это объектно-ориентированный язык программированияязык программирования

Page 3: Программирование на языке  VBA

Основные понятияОсновные понятия

объект объект семейство семейство метод метод класс класс свойство свойство событие событие объектная модель объектная модель

Page 4: Программирование на языке  VBA

Объектные модели Microsoft Объектные модели Microsoft Office 2002 Office 2002

библиотекабиблиотека объектовобъектов Microsoft Access (Microsoft Access Microsoft Access (Microsoft Access 10.0 Object Library); 10.0 Object Library);

библиотека объектов доступа к данным (Microsoft DAO библиотека объектов доступа к данным (Microsoft DAO 3.6 Object Library); 3.6 Object Library);

библиотекабиблиотека объектовобъектов ActiveX (Microsoft ActiveX Data ActiveX (Microsoft ActiveX Data Objects 2.6); Objects 2.6);

расширения ADO для поддержки DDL и защиты расширения ADO для поддержки DDL и защиты информации (Microsoft ADO Extensions 2.6 for DDL and информации (Microsoft ADO Extensions 2.6 for DDL and Security); Security);

библиотекабиблиотека объектовобъектов Microsoft Jet Microsoft Jet ии репликациирепликации (Microsoft Jet and Replication Objects 2.6). (Microsoft Jet and Replication Objects 2.6).

Кроме этого, в приложениях Access обычно используются: Кроме этого, в приложениях Access обычно используются: библиотекабиблиотека объектовобъектов Visual Basic (Microsoft Visual Basic Visual Basic (Microsoft Visual Basic

for Applications); for Applications); библиотекабиблиотека объектовобъектов Microsoft Office (Microsoft Office Microsoft Office (Microsoft Office

10.0 Object Library). 10.0 Object Library). Две эти библиотеки являются Две эти библиотеки являются общими для всех приложений Microsoft Office. общими для всех приложений Microsoft Office.

Page 5: Программирование на языке  VBA

Процедуры Процедуры VBAVBA

Sub <имяПроцедуры> Sub <имяПроцедуры> (<аргумент1>, <аргумент2>, ... ) (<аргумент1>, <аргумент2>, ... )

<onepaтopVisualBasic1> <onepaтopVisualBasic1> <onepaтopVisualBasic2> <onepaтopVisualBasic2>

End Sub End Sub

Page 6: Программирование на языке  VBA

Функции Функции VBAVBA

Function <имяФункции> Function <имяФункции> (<аргумент1>, <аргумент2>, ... ) (<аргумент1>, <аргумент2>, ... )

<onepaторVisualBasicl> <onepaторVisualBasicl> <onepaторVisualBasic2> <onepaторVisualBasic2>

<имяФункции> = <имяФункции> = <возвращаемоеЗначение> <возвращаемоеЗначение>

End Function End Function

Page 7: Программирование на языке  VBA

Примеры вызова процедуры под именем CrossRC Примеры вызова процедуры под именем CrossRC с передачей ей двух аргументов (константы и с передачей ей двух аргументов (константы и выражения): выражения):

CrossRC 7, i + 2 CrossRC 7, i + 2

ИЛИ ИЛИ

Call CrossRC(7, i + 2) Call CrossRC(7, i + 2)

Пример вызова двух функций — Left и Mid, и Пример вызова двух функций — Left и Mid, и использования возвращаемого ими значения в использования возвращаемого ими значения в выражении: выражении:

yStr = Left(y, 1) & Mid(у, 2, 1) yStr = Left(y, 1) & Mid(у, 2, 1)

Page 8: Программирование на языке  VBA

Допускается два различных Допускается два различных способа передачи переменных способа передачи переменных

процедуре или функции: процедуре или функции: по по ссылке ссылке и и по значению.по значению.

Page 9: Программирование на языке  VBA

Пример:Пример:Sub Main() Sub Main()

а = 10 а = 10

b = 20 b = 20

с = 30 с = 30

Call Examplel(a, b, с) Call Examplel(a, b, с)

Call MsgBox(a) Call MsgBox(a) Call MsgBox(b) Call MsgBox(b) Call MsgBox(c) Call MsgBox(c) End Sub End Sub

Sub Example1(x, ByVal y, ByRef z) Sub Example1(x, ByVal y, ByRef z)

x = x + 1 x = x + 1

у = у + 1 у = у + 1

z = z + 1 z = z + 1

Call MsgBox(x) Call MsgBox(x)

Call MsgBox(y) Call MsgBox(y)

Call MsgBox(z) Call MsgBox(z) End Sub End Sub

Page 10: Программирование на языке  VBA

Программа может состоять (и обычно Программа может состоять (и обычно состоит) из многих процедур и состоит) из многих процедур и функций, которые могут располагаться функций, которые могут располагаться в одном или нескольких в одном или нескольких модулях. модулях. Модули группируются в Модули группируются в проекты, проекты, при при этом в одном проекте могут мирно этом в одном проекте могут мирно сосуществовать несколько различных сосуществовать несколько различных программ, использующих общие модули программ, использующих общие модули или процедуры. или процедуры.

Каждая из процедур, находящихся в Каждая из процедур, находящихся в одном модуле, должна иметь одном модуле, должна иметь уникальное имя, однако в проекте уникальное имя, однако в проекте может содержаться несколько может содержаться несколько различных модулей.различных модулей.

Page 11: Программирование на языке  VBA

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

<имяМодуля>.<имяПроцедуры> <имяМодуля>.<имяПроцедуры>

Если при этом имя модуля состоит из нескольких слов, Если при этом имя модуля состоит из нескольких слов, следует заключить это имя в квадратные скобки. следует заключить это имя в квадратные скобки. Например, если модуль называется "Графические Например, если модуль называется "Графические процедуры", а процедура — "Крестик", вызов может процедуры", а процедура — "Крестик", вызов может выглядеть следующим образом: выглядеть следующим образом:

[Графические процедуры].Крестик [Графические процедуры].Крестик

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

<имяПроекта>.<имяМодуля>.<имяПроцедуры> <имяПроекта>.<имяМодуля>.<имяПроцедуры>

Page 12: Программирование на языке  VBA

Переменные, константы и типы Переменные, константы и типы данных данных

Объявление переменныхОбъявление переменных

Dim <имяПеременной> Dim <имяПеременной> [Аs<типДанных>] [Аs<типДанных>]

Пример:Пример:

Dim i As Integer, j As Integer Dim i As Integer, j As Integer

Dim x As Double Dim x As Double

Page 13: Программирование на языке  VBA

Типы данныхТипы данныхArrayArray Массив переменных, для ссылки на конкретный элемент массива Массив переменных, для ссылки на конкретный элемент массива

используется индекс. используется индекс.

BooleanBoolean Требуемая память: зависит от размеров массива Принимает Требуемая память: зависит от размеров массива Принимает одно из двух логических значений: True или False. Требуемая память: одно из двух логических значений: True или False. Требуемая память: 2 байта Byte Число без знака от 0 до 255 Требуемая память: 1 байт 2 байта Byte Число без знака от 0 до 255 Требуемая память: 1 байт

CurrencyCurrency Используется для произведения денежных вычислений с Используется для произведения денежных вычислений с фиксированным количеством знаков после десятичной запятой, в тех фиксированным количеством знаков после десятичной запятой, в тех случаях, когда важно избежать возможных ошибок округления. случаях, когда важно избежать возможных ошибок округления. Диапазон возможных значений: от -922 337 203 685 477,5808 до 922 Диапазон возможных значений: от -922 337 203 685 477,5808 до 922 337 203 685 477,5807. Требуемая память: 8 байтов. Символ 337 203 685 477,5807. Требуемая память: 8 байтов. Символ определения типа по умолчанию: @ определения типа по умолчанию: @

DateDate Используется для хранения дат. Диапазон возможных значений: от Используется для хранения дат. Диапазон возможных значений: от 1 января 0100 г. до 31 декабря 9999 г. Требуемая память: 8 байтов 1 января 0100 г. до 31 декабря 9999 г. Требуемая память: 8 байтов

DoubleDouble Числовые значения с плавающей точкой двойной точности. Числовые значения с плавающей точкой двойной точности. Диапазон возможных значений для отрицательных чисел: от -Диапазон возможных значений для отрицательных чисел: от -1 ,797693 13486232Е308 до -4,94065645841 247Е-324. 1 ,797693 13486232Е308 до -4,94065645841 247Е-324. Диапазон возможных значений для положительных чисел: от Диапазон возможных значений для положительных чисел: от 4,94065645841 247Е-324 до 1, 7976931 3486232Е308. 4,94065645841 247Е-324 до 1, 7976931 3486232Е308. Требуемая память: 8 байтов. Символ определения типа по умолчанию: Требуемая память: 8 байтов. Символ определения типа по умолчанию: # #

Page 14: Программирование на языке  VBA

Типы данныхТипы данныхIntegerInteger Короткие целые числовые значения. Диапазон Короткие целые числовые значения. Диапазон

возможных значений: от -32 768 до 32 767. Требуемая память: возможных значений: от -32 768 до 32 767. Требуемая память: 2 байта. Символ определения типа по умолчанию: % 2 байта. Символ определения типа по умолчанию: %

LongLong Длинные целые числовые значения. Длинные целые числовые значения. Диапазон возможных значений: от -2 147 483 648 до 2 147 483 Диапазон возможных значений: от -2 147 483 648 до 2 147 483 647. 647. Требуемая память: 4 байта. Символ определения типа по Требуемая память: 4 байта. Символ определения типа по умолчанию: & умолчанию: &

ObjectObject Используется только для хранения ссылок на объекты. Используется только для хранения ссылок на объекты. Требуемая память: 4 байта Требуемая память: 4 байта

SingleSingle Числовые значения с плавающей точкой обычной Числовые значения с плавающей точкой обычной точности. точности. Диапазон возможных значений для отрицательных чисел: от -Диапазон возможных значений для отрицательных чисел: от -3.402823Е38 до -1 ,401 298Е-45. 3.402823Е38 до -1 ,401 298Е-45. Диапазон возможных значений для положительных чисел: от Диапазон возможных значений для положительных чисел: от 1 ,401 298Е-45 до 3.402823Е38. 1 ,401 298Е-45 до 3.402823Е38. Требуемая память: 4 байта. Символ определения типа по Требуемая память: 4 байта. Символ определения типа по умолчанию: ! умолчанию: !

Page 15: Программирование на языке  VBA

Типы данныхТипы данныхStringString

Используется для хранения строковых значений. Длина Используется для хранения строковых значений. Длина строки: от 0 до 64 Кбайтов. Требуемая память: 1 байт на строки: от 0 до 64 Кбайтов. Требуемая память: 1 байт на символ. Символ определения типа по умолчанию: $ символ. Символ определения типа по умолчанию: $

VariantVariant Может использоваться для хранения различных типов Может использоваться для хранения различных типов данных: даты/времени, чисел с плавающей точкой, целых данных: даты/времени, чисел с плавающей точкой, целых чисел, строк, объектов. чисел, строк, объектов. Требуемая память: 16 байтов, плюс 1 байт на каждый символ Требуемая память: 16 байтов, плюс 1 байт на каждый символ строковых значений. строковых значений. Символ определения типа по умолчанию: отсутствует Символ определения типа по умолчанию: отсутствует

Page 16: Программирование на языке  VBA

Для определения типа данных аргументов Для определения типа данных аргументов процедуры или функции используется описание процедуры или функции используется описание типа данных непосредственно в заглавной типа данных непосредственно в заглавной строке процедуры или функции. Например: строке процедуры или функции. Например:

Sub SplitStr(str1 As String,Sub SplitStr(str1 As String,str2 As String, str3 As String) str2 As String, str3 As String)

Определение типа данных возвращаемого Определение типа данных возвращаемого функцией значения завершает заглавную строку функцией значения завершает заглавную строку функции, например: функции, например:

Function FindSplitSpace Function FindSplitSpace (strl As String) As Integer (strl As String) As Integer

Page 17: Программирование на языке  VBA

КонстантыКонстанты

Const <имяКонстанты> Const <имяКонстанты> [As <типДанных>] = <выражение> [As <типДанных>] = <выражение>

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

Например, следующий оператор Например, следующий оператор определяет целую константу maxLen: определяет целую константу maxLen:

Const maxLen% = 30 Const maxLen% = 30

Page 18: Программирование на языке  VBA

Предопределенные константыПредопределенные константы

Встроенные константы, относящиеся к Встроенные константы, относящиеся к объектам Access, начинаются с префикса ас, объектам Access, начинаются с префикса ас, относящиеся к объектам Excel — с префикса относящиеся к объектам Excel — с префикса xl, относящиеся к объектам Word — с xl, относящиеся к объектам Word — с префикса wd, а относящиеся к объектам VBA префикса wd, а относящиеся к объектам VBA — с префикса vb. — с префикса vb.

Например, в команде Например, в команде DoCmd.OpenForm "Orders", DoCmd.OpenForm "Orders", acNormal, , stLinkCriteria acNormal, , stLinkCriteria используется встроенная константа Access используется встроенная константа Access

acNormal. acNormal.

Page 19: Программирование на языке  VBA

Ссылки на объектыСсылки на объекты

Dim <имяПеременкой> As Object Dim <имяПеременкой> As Object

Set <имяПеременной> = Set <имяПеременной> = <ссылкаНаОбъект> <ссылкаНаОбъект>

Пример:Пример:

Dim MyBase As Database Dim MyBase As Database

Set MyBase = CurrentDb( ) Set MyBase = CurrentDb( )

Page 20: Программирование на языке  VBA

МассивыМассивы

Dim <имяМассива> (<размер1>, <размер2>, ...) Dim <имяМассива> (<размер1>, <размер2>, ...) As <типДанных> As <типДанных> где <размер1>, <размер2> и т.д. задают где <размер1>, <размер2> и т.д. задают размеры массива — количество индексов и размеры массива — количество индексов и максимально допустимое значение для максимально допустимое значение для каждого. конкретного индекса. При этом каждого. конкретного индекса. При этом индексирование элементов массива по индексирование элементов массива по умолчанию начинается с нуля. умолчанию начинается с нуля.

Пример:Пример:Dim Array1 (9) As Integer Dim Array1 (9) As Integer

Dim Array2 (4, 9) As Variant Dim Array2 (4, 9) As Variant

Page 21: Программирование на языке  VBA

При объявлении массива можно указать не При объявлении массива можно указать не только верхнюю границу индекса, но и его только верхнюю границу индекса, но и его нижнюю границу.нижнюю границу.

Dim <имяМассива> (<мин1> То <макс1>, ...) Dim <имяМассива> (<мин1> То <макс1>, ...) As <типДанных> As <типДанных>

Например: Например: Dim Temperature (-14 То 0) Dim Temperature (-14 То 0) As Single As Single

Синтаксис объявления и определения размеров Синтаксис объявления и определения размеров динамического массива: динамического массива:

Dim <имяМассива> ( ) As <типДанных> Dim <имяМассива> ( ) As <типДанных> ReDim <имяМассива> (<размер1>,<размер2>,... ) ReDim <имяМассива> (<размер1>,<размер2>,... )

Page 22: Программирование на языке  VBA

Область действия переменных и Область действия переменных и процедур процедур

уровень процедуры; уровень процедуры;

уровень модуля; уровень модуля;

уровень проекта. уровень проекта.

Page 23: Программирование на языке  VBA

Public Al As String Private A2 As Integer Dim A3 As Single Sub Prod () Dim A4 As Integer Static A5 As Integer Al = "Текстовая строка 1" A2= 2 A3 = 3.14 A4 = A4 + 4 A5 = A5 + 5 MsgBox A4 MsgBox A5 End Sub

Sub Proc2 () Procl MsgBox Al MsgBox A2 MsgBox A3 MsgBox A4 MsgBox A5 Procl End Sub