- •Создание динамических структур данных
- •Встроенный динамический класс Collection
- •Создание собственных динамических классов
- •Обертывание коллекции vba
- •Несколько слов об api, Win32, dll
- •Вызов функций и оператор Declare
- •Две кодировки ansi и Unicode
- •Два языка: c и vb. Различия при вызове функций
- •Соответствие между простыми типами данных
- •Структуры языка c и тип, определенный пользователем, в языке vba
- •Об описателях языка c и объектах Windows
- •Void функции языка c
- •Вызов аргументов по ссылке ByRef и по значению ByVal
- •Строковые аргументы при вызове функций Win32 api
- •Примеры работы с Win32 api функциями
- •Работа с окнами
- •Характеристики окружения
- •Вызов функций Win32 api, работающих в Unicode кодировке
- •Обработка ошибок, возникающих при вызове функций Win32 api
- •Функции api и вызов Callback функций
- •Функции высших порядков и конструкция AddressOf
- •Функции перечисления Win32 api
- •Функция EnumWindows
- •Еще один пример работы с функцией EnumWindows
- •Функции Win32 api для работы с таймером
- •Функция SetTimer
- •Функция обратного вызова TimerProc
- •Функция KillTimer
- •Пример создания, работы и удаления таймера
- •Классы как обертка вызовов функций Win32 api
- •Построение класса "ВашТаймер"
- •Использование класса ВашТаймер
- •Операторы
- •Операторы и строки
- •Оператор комментария
- •Присваивание
- •Оператор Let
- •Оператор lSet
- •Оператор rSet
- •Оператор Set
- •Управляющие операторы
- •Условный оператор If Then Else End If
- •Оператор выбора Select Case
- •Цикл For Next
- •Цикл Do...Loop
- •Цикл While...Wend
- •Цикл For Each...Next
- •Работа с каталогами, папками и файлами
- •Изменение текущего диска: оператор ChDrive
- •Изменение текущего каталога (папки): оператор ChDir
- •Создание каталога (папки): оператор MkDir
- •Переименование каталогов (папок) и файлов: оператор Name
- •Удаление каталога (папки): оператор RmDir
- •Установка атрибутов файла: оператор SetAttr
- •Копирование файлов: оператор FileCopy
- •Удаление файлов: оператор Kill
- •Прочие операторы
- •Операции с одним объектом. Оператор With
- •Операции
- •Работа с числовыми данными
- •Математические функции
- •Работа со строками
- •Сравнение строк
- •Сравнение с образцом
- •Основные операции над строками
- •Новые функции для работы со строками
- •Функция InStrRev - поиск последнего вхождения подстроки
- •Функция Replace - замена всех вхождений подстроки
- •Удаление подстроки
- •Разбор строки. Функции Split, Join и Filter
- •Преобразование строки в массив. Функция Split
- •Сборка элементов массива в строку. Функция Join
- •Фильтрация элементов массива. Функция Filter
- •Несколько модификаций встроенных функций
- •Замена, основанная на шаблоне. Функция WildReplace
- •Замена разных символов строки. Функция CharSetReplace
- •Фильтрация, основанная на шаблоне. Функция WildFilter
- •Разбор строки, допускающей разные разделители ее элементов. Функция WildSplit
- •Работа с датами и временем
- •Присваивание значений
- •Встроенные функции для работы с датами
- •Определение текущей даты или времени.
- •Вычисления над датами
- •Функция Timer и хронометраж вычислений
- •Некоторые встроенные функции
- •Функции проверки типов данных
- •Преобразование типов данных
- •Форматирование данных. Функции группы Format
- •Функция Format.
- •Другие функции форматирования
- •Описание и создание процедур
- •Классификация процедур
- •Синтаксис процедур и функций
- •Функции с побочным эффектом
- •Создание процедуры
- •Создание процедур обработки событий
- •Вызовы процедур и функций Вызовы процедур Sub
- •Вызовы функций
- •Использование именованных аргументов
- •Аргументы, являющиеся массивами
- •Конструкция ParamArray
- •Задача о медиане
- •Пользовательские функции, принимающие сложный объект Range
- •Рекурсивные процедуры
- •Деревья поиска
- •Класс TreeNode
- •Класс BinTree
- •Работа со словарем
- •Отладка
- •Написание надежных программ
- •Искусство отладки
- •Средства отладки
- •Панель отладки и команды меню
- •Окна наблюдения
- •Окно локальных переменных - Locals
- •Окно проверки - Immediate
- •Окно контрольных выражений - Watch
Копирование файлов: оператор FileCopy
Синтаксис:
FileCopy файл-источник, файл-результат
Параметр файл-источник - строковое выражение, задающее имя копируемого файла, Файл-результат - строковое выражение, которое определяет имя результирующего файла. Оба имени могут включать имена дисков, каталогов или папок. Открытый в данный момент файл копировать нельзя.
Пример:
'Копирование файла
FileCopy "Temp1\Example1.xls", "Temp2\Example1.xls"
Удаление файлов: оператор Kill
Синтаксис:
Kill файл
Параметр файл - строковое вырыжение, задающее имя удаляемого файла. Он может включать имя диска и путь по каталогам или папкам. Для удаления нескольких файлов можно использовать в образце имени файла символ '*' для обозначения произвольной последовательности букв и '?' - для обозначения одного символа. Нельзя удалять открытый в данный момент файл.
Пример.
Допустим, в текущем каталоге находятся файлы PROG.DOC, PROG.CPP и PROG.OBJ. Тогда оператор:
Kill "PROG.*"
удалит эти файлы с диска.
Прочие операторы
И еще несколько полезных операторов VBA, не попавших ни в одну из предыдущих групп.
Операции с одним объектом. Оператор With
Если в одном блоке программы предстоит выполнить несколько операций с одним объектом, то, чтобы не повторять многократно имя этого объекта, можно ввести оператор With.
Синтаксис:
With объект
[операторы]
End
With
Здесь объект - имя объекта или переменной, определенного пользователем типа, а операторы - последовательность операторов, которые могут действовать с указанным объектом. В этих операторах имена свойств и методов указанного объекта можно начинать с точки, опуская имя самого объекта.
Допустим, пользовательский тип Person и переменная MyFriend определены так.
Type Person
Name As String
Age As Integer
Height As Single
End Type
Dim MyFriend As Person
Тогда присвоение значений свойствам переменной MyFriend можно произвести с помощью оператора With:
With MyFriend
Name = "Сергей"
Age= 35
.Height = 178.5
End With
Подчеркнем, что в каждом блоке имя лишь одного объекта задается по умолчанию. При вложенности операторов With:
With объект1
операторы1
With объект2
операторы2
End With
End With
в блоке операторы2 имя объекта1 нужно указывать полностью. Если же объект2 - элемент (подобъект) объекта1, то, использовав оператор With объект2, можно получить во внутреннем блоке сокращенный доступ к свойствам объекта "объект1. объект2".
Например, если к типу Person добавить данные о встрече:
Type Meeting
Place As String
Date As Date
End Type
Type Person
Name As String
Age As Integer
Height As Single
LastMeeting As Meeting
End Type
Dim NewAcquaintance As Person
то задавать данные о новом знакомом NewAcquaintance можно, используя вложенные операторы With.
With NewAcquaintance
.Name = "Елена"
.Age= 40
.Height = 168
With.LastMeeting
.Place= "библиотека"
'этот оператор эквивалентен:
'NewAcquaintance. LastMeeting.Place="библиотека"
.Date= #08/03/99#
End With
End With
Звуковой сигнал: оператор Beep
Подает звуковой сигнал через динамик компьютера.
Синтаксис:
Beep
Частота и сила звука зависят от оборудования и могут меняться от компьютера к компьютеру. Обычно звуковой сигнал используется как реакция на какие-либо ошибки или исключительные ситуации, возникающие при выполнении программы.
Установка системной даты: оператор Date
Синтаксис:
Date = дата
Пример:
Date = #April 29, 1999# ' Изменение системной даты.
Установка системного времени: оператор Time
Синтаксис оператора Time:
Time = время
Пример:
Time = #8:15:47 PM# ' Установка системного времени
Моделирование ввода с клавиатуры: оператор SendKeys
Посылает один или несколько кодов символов в текущее активное окно, как если бы соответствующие клавиши были нажаты.
Синтаксис:
SendKeys строка[, режим-ожидания]
Параметр строка - строковое выражение, задающее последовательность посылаемых символов. Необязательный параметр режим-ожидания - выражение с булевым значением. Если оно False (по умолчанию), управление возвращается в процедуру сразу же после посылки кодов; True - посланная последовательность кодов должна быть обработана, прежде чем управление возвратится в процедуру.
Большинство символов, набираемых на клавиатуре, входят в строку непосредственно. Например, чтобы послать последовательность из трех символов Y, E и S, возьмите в качестве строки " YES". Символы: +, ^, %, ~, скобки и некоторые другие следует помещать в фигурные скобки. Например, чтобы послать +, в параметр строка нужно поместить {+}. Для посылки кодов клавиш, не отображаемых на экране, имеются специальные коды. Некоторые представлены в таблице, остальные можно найти с помощью подсказки:
Таблица 7.2. Коды клавиш, не отображаемых на экране |
|
Клавиша |
Код |
BACKSPACE |
{BS} |
BREAK |
{BREAK} |
CAPS LOCK |
{CAPSLOCK} |
DEL |
{DEL} |
DOWN ARROW |
{DOWN} |
END |
{END} |
ENTER |
{ENTER} или ~ |
ESC |
{ESC} |
HOME |
{HOME} |
INS |
{INS} |
LEFT ARROW |
{LEFT} |
PAGE DOWN |
{PGDN} |
PAGE UP |
{PGUP} |
RIGHT ARROW |
{RIGHT} |
TAB |
{TAB} |
UP ARROW |
{UP} |
Fn |
{Fn} (n=1,…, 12) |
Чтобы послать комбинацию клавиш, для Shift, Ctrl и Alt используются следующие коды (В примере используется документ DocTwo7:
Shift - +
Ctrl ^
Alt %
Пример:
В качестве примера рассмотрим открытие документа, требующего пароль при его открытии:
Public Sub OpenDocWithPassword()
'Открытие документа с паролем
SendKeys "+^" 'Переключение раскладки клавиатуры
SendKeys "don" & "{'}" & "t know", False 'пароль "don't know"
Documents.Open "e:\O2000\CD2000\Ch7\DocTwo7.doc"
Documents("DocTwo7.doc").Activate
End Sub
Обратите внимание на два момента:
-
Прежде, чем послать сам пароль, происходит переключение клавиатуры на другую раскладку, для чего используется комбинация символов "Shift + Ctrl".
-
Символы клавиатуры посылаются в буфер ввода еще до того, как они потребуются. Если бы оператор Open предшествовал оператору SendKeys, то окно ввода пароля появилось бы до выполнения этого оператора. В данном же случае при открытии документа пароль автоматически появится в окне ввода, так что останется только щелкнуть по кнопке OK.
Программный код большинства примеров данной лекции можно найти в проектах, доступных для просмотра: DocOne8, DocTwo8.