ebook img

Лекции по Visual Basic Applications PDF

24 Pages·0.888 MB·Russian
Save to my drive
Quick download
Download
Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.

Preview Лекции по Visual Basic Applications

Лекция 1 Visual Basic for Applications (VBA) Что из себя представляет VBA, обоснование необходимости его применения. VBA - поддерживается во всех приложениях Office. Выбрал приложение - разработка собственных программ, используя мощную базу пакета MS Office (Excel - расчеты, Access - базы данных и т.д.). VBA - подмножество Visual Basic 5. В VBA нет кое-чего из VB5, но зато он поддерживается всеми приложениями Office. Существует также VBScript - еще более обрезанный VBA для Internet. VBA - исполняемый файл не создается, но это и не надо, т.к. все равно нужна Среда Word, Excel, Access. Отличительные особенности VBA, основные термины и понятия ООП Basic - нет обязательного описания переменных (достоинство и недостаток - поиск ошибок из-за описок в именах переменных). VBA - объектно - ориентированный язык. Объект - совокупность данных (свойств) и процедур работы с ними (методов). Иными словами в объекте заключены как данные, так и методы работы с ними (инкапсуляция), что позволяет рассматривать объект как единое целое, в неразрывной связи всех его свойств и поведения. Объект легче воспринимается человеческим мышлением, т.к. оно привыкло иметь дело с объектами. Кроме того, у разных объектов, сходные по смыслу свойства и методы имеют одинаковые названия. Так например метод Delete (удаление объекта) имеется у всех приведенных ниже объектов Excel: Button (кнопка), Chart (диаграмма), Worksheet (рабочий лист) и др. Для того, чтобы удалить любой из этих объектов достаточно сделать запись Объект.Delete. Это позволяет одному и тому же логическому действию над разными объектами поставить в соответствие одно и тоже имя метода или свойства. При этом каждый объект реализует метод Delete удобным для него способом, и программисту нет необходимости заду- мываться над особенностями его реализации для каждого конкретного объекта, что позволяет целиком сосредоточиться на логике программы. В VBA синтаксис типичен для ООП, название объекта и его свойств (методов) разделяются точкой: Класс Объекта . Объект . Свойство или Объект . Метод. Семейства - набор связанных объектов. Каждый объект в семействе имеет свое имя. Пример: в Excel семество Worksheets (рабочие листы) содержит объекты - рабочие листы, каждый из которых имеет свое имя. Синтаксис для семейств: Worksheets(“Лист1”). Синтаксис VBA: каждая команда - в отдельной строке, несколько команд в одной строке - через двоеточие, одна команда на нескольких строках - через нижнее подчеркивание, метки - как в Паскале, или можно нумеровать строчки, как в Бэйсике 10 Len =1 : Name = “klhjhsdflkjk_ adkjhkhdfkjsdhksdjfhsjhkhj” : Goto метка 21 print.Debug Len : GoTo 10 метка : Stop Типы данных, используемые в VBA : Byte (байт) 1 байт От 0 до 255. Boolean (логический) 2 байт True или False. Integer (целое) 2 байт От -32 768 до 32 767 Long (длинное целое) 4 байт От -2 147 483 648 до 2 147 483 647. Single (с плавающей точкой 4 байт От -3,402823E38 до -1,401298E-45 для отрицательных значений; от обычной точности) 1,401298E-45 до 3,402823E38 для положительных значений. Double (с плавающей точкой 8 байт От -1,79769313486232E308 до -4,94065645841247E-324 для двойной точности) отрицательных значений; от 4,94065645841247E-324 до 1,79769313486232E308 для положительных значений. Currency (денежный) 8 байт От -922 337 203 685 477,5808 до 922 337 203 685 477,5807. Decimal (масштабируемое 14 +/-79 228 162 514 264 337 593 543 950 335 без дробной части; +/- целое) байт 7,9228162514264337593543950335 с 28 знаками справа от запятой; минимальное ненулевое значение имеет вид +/- 0,0000000000000000000000000001. Date (даты и время) 8 байт От 1 января 100 г. до 31 декабря 9999 г. Object (объект) 4 байт Любой указатель объекта. String (строка переменной 10 байт + длина строки. длины) От 0 до приблизительно 2 миллиардов. String (строка постоянной Длина строки. длины) От 1 до приблизительно 65 400. Variant (числовые подтипы) 16 байт. Любое число вплоть до границ диапазона для типа Double. Variant (строковые подтипы) 22 байт + длина строки. Как для строки (String) переменной длины. Определение пользовательских типов  Ляхевич А.Г., 1998-1999 год Инструкция TYPE - применяется только на уровне модуля для описания определяемого пользователем типа данных. Не допускается появление номеров строк и меток строк в блоках Type...End Type. Синтаксис: [Private | Public] Type имяПеременной Type StateData имяЭлемента [([индексы])] As тип CityCode (1 To 100) As Integer [имяЭлемента [([индексы])] As тип] County As String * 30 . . . Population As Long End Type End Type Определение констант Инструкция Const используется для описания константы и определения ее значения. После описания константу нельзя модифицировать и нельзя присваивать ей новое значение. Синтаксис: [Public | Private] Const имяКонстанты [As тип] = выражение Инструкция Option Explicit В процедурах и функциях допускается использование переменной, которая явно не описана в этой процедуре (с помощью ключевого слова Dim), но при этом может возникать конфликт имен. Если на уровне модуля был определен элемент с таким же именем, то ссылка будет на него. Чтобы избежать возникновения конфликтов такого рода, следует включить режим обязательного описания переменных (инструкция Option Explicit). Инструкция Option Explicit при ее использовании должна находиться в модуле до любой процедуры. При использовании инструкции Option Explicit, VBA требует явно описать все переменные. При попытке использовать неописанное имя переменной возникает ошибка во время компиляции. Описание переменных и массивов При описании переменных и массивов используются инструкции Public, Private, Static, Dim: Public name1 As Byte - описание глобальной переменной доступной для всех модулей. Public massiv1 (10, 10) As Integer - глобальный массив 10 на 10. Private name2 As Integer - описание локальной переменной доступной только внутри модуля. Static name3 As Variant - переменные, описанные с помощью инструкции Static вместо инструкции Dim, сохраняют свои значения при выполнении программы. Dim name4 As String*30 - описание строки фиксированной длины Dim maasiv2 (1 to 5, 10 to 20) As Byte - описание массива индексы которого лежат в пределах 1..5, 10..20. Переменные, описанные с помощью ключевого слова Dim или Static на уровне модуля, доступны для всех процедур в данном модуле. Переменные, описанные на уровне процедуры, доступны только в данной процедуре. Допускается описание нескольких переменных в одной строке. В этом случае, надо указать определенный тип для каждой переменной, в противном случае все переменные кроме последней по умолчанию получат тип Variant. Пример: Dim intX As Integer, intY As Integer, intZ As Integer - все переменные описаны как Integer. Dim intX, intY, intZ As Integer - только последняя переменная описана как Integer, остальные - Variant. Если тип данных или тип объекта не задан, и в модуле отсутствует инструкция DefТип, по умолчанию переменная получает тип Variant. При инициализации переменных числовая переменная получает значение 0, строка переменной длины получает значение пустой строки (""), а строка фиксированной длины заполняется нулями. Переменные типа Variant получают при инициализации значение Empty, объектные переменные - значение Nothing. Присваивание значения переменным Let - для обычных переменных, Set - для объектных переменных или просто через “=“. Let a = 10 a=10. Для массива a(1,1) = 20. Описание динамического массива Если массив описан как динамический, можно изменять его размер во время работы программы. Для описания динамического массива используются инструкции Static, Dim, Private, или Public с пустыми скобками, как показано в следующем примере: Dim massiv() As Integer. В ходе выполнения программы можно воспользоваться инструкцией ReDim для определения числа элементов массива. Пример: Dim massiv() As Integer резервирует динамический массив ReDim massiv (10,10) выделяет память под массив 10 на 10 ReDim Preserv massiv (30,100) изменяет размерность массива, сохраняя данные, находившиеся в нем (ключевое слово Preserv) ReDim massiv (10,10) изменяет размерность массива без сохранения данных При попытке переопределить размерность массива, чей размер был явно указан в инструкции Private, Public или Dim, возникает ошибка. Инструкция Erase - освобождает память, отведенную для динамического массива. Для масссивов фиксированной длины Erase повторно инициализирует элементы массивов. Пример: Erase massiv1, massiv2, massiv3, ... , massivN.  Ляхевич А.Г., 1998-1999 год Инструкция Option Base Применяется на уровне модуля для задания нижней границы отсчета индексов массива. Синтаксис: Option Base {0 | 1}. По умолчанию 0. Инструкция Option Base может задаваться в модуле только один раз и должна предшествовать описаниям массивов. Функции LBound, Ubound Возвращает соответственно нижнюю и верхнюю границу индексов массива. LBound(имяМассива[, размерность]) Размерность - целое число, указывающее размерность, нижнюю границу которой возвращает функция. Для первой размерности - 1 (по умолчанию), для второй 2 и т.д. Dim massiv(20 to 30, 10 to 35) otvet = LBound(massiv, 2) -> otvet = 10. Функция Array Возвращает значение типа Variant, содержащее массив. Пример: Dim A As Variant A = Array(10,20,30) B = A(2) Переменная типа Variant может содержать массив любого типа, за исключением строк фиксированной длины и определяемых пользователем типов. Лекция 2 Процедуры и функции в VBA [Private | Public] [Static] Sub имя [(списокАргументов)] [Public | Private] [Static] Function имя [инструкции] [(списокАргументов)] [As тип] [Exit Sub] [инструкции] [инструкции] [имя = выражение] End Sub [Exit Function] [инструкции] [имя = выражение] End Function Public Static Sub summa(arg1 as String, By Val arg2, ParamArray arg3 () ) summa = 0 For Each i In arg3() summa = summa + i Next i End Sub Function primer(arg1 as Variant, arg2, Optional arg3 As Byte = 3, Optional arg4 = "Мария") As Boolean primer=true If arg2=arg3 Then Exit Function Else primer=false End If End Function Элемент Описание Public Указывает, что процедура Function доступна для всех других процедур во всех модулях. При использовании в личном модуле (содержащем инструкцию Option Private) такая процедура недоступна вне проекта. Private Указывает, что процедура Function доступна для других процедур только того модуля, в котором она описана. Static Указывает, что локальные переменные процедуры Function сохраняются в промежутках времени между вызовами этой процедуры. Атрибут Static не действует на переменные, описанные вне процедуры Function, даже если они используются в этой процедуре. имя Имя процедуры Function, удовлетворяющее стандартным правилам именования переменных. список Необязательный. Список переменных, представляющий аргументы, которые передаются в Аргументов процедуру Function при ее вызове. Имена переменных разделяются запятой. тип Необязательный. Тип данных. Поддерживаются типы Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal (в настоящее время не поддерживается), Date, String (за исключением строк фиксированной длины), Object, Variant или любой определяемый пользователем тип. Невозможен возврат массивов любого типа, однако допускается возврат значения типа Variant, содержащего массив. Аргумент списокАргументов имеет следующий синтаксис и элементы: [Optional] [ByVal | ByRef] [ParamArray] имяПеременной[( )] [As тип] [= поУмолчанию] Элемент Описание Optional Указывает, что этот аргумент необязателен. При использовании Optional все последующие  Ляхевич А.Г., 1998-1999 год аргументы, также должны быть необязательными и описаны с помощью Optional. Не допускается использование Optional для любого из аргументов, если используется ключевое слово ParamArray. ByVal Указывает, что этот аргумент передается по значению, т.е. в процедуру передается не адрес аргумента (ссылка на аргумент), а только его значение (“копия” аргумента). В результате, изменение значения аргумента внутри данной процедуры становится невозможным. ByRef Указывает, что этот аргумент передается по ссылке (используется в VBA по умолчанию). ParamArray Ключевое слово ParamArray позволяет задавать произвольное количество аргументов. Используется только в качестве последнего элемента в спискеАргументов для указания, что конечным аргументом является описанный как Optional массив типа Variant. Оно не может быть использовано со словами ByVal, ByRef или Optional. поУмолчанию Значение переменной по умолчанию: любая константа или выражение, дающее константу. Используется только вместе с параметром Optional. Если указан тип Object, единственным значением по умолчанию может быть значение Nothing. Дополнительные сведения: Процедуры и функции по умолчанию являются Public. Допускаются рекурсивные процедуры и функции; т. е. они могут вызывать сами себя. Однако рекурсия может приводить к переполнению стека, необходимо предусмотреть условие выхода из рекурсии (Exit Sub, Exit Function). Ключевое слово Static обычно не используется с рекурсивными процедурами Function. Не допускается ссылка за пределы процедуры или функции (инструкции GoSub, GoTo, Return). Не допускается определение процедуры или функции внутри другой процедуры Function, Sub или Property. Если имени функции не присваивается никакого значения, то по умолчанию: числовая функция возвращает 0, строковая функция - пустую строку (""), функция типа Variant - значение Empty, объектная функция - Nothing. Управление выполнением программы Безусловный переход: 1) Инструкция GoTo Метка. Метка строки начинается с буквы и заканчивается двоеточием (metka:). Метки строк являются независимыми от регистра и должны начинаться в первом столбце строки. 2) Инструкция GoSub...Return Задает переход в подпрограмму и возвращение из нее в процедуру. GoSub Метка ... метка: [инструкции] ... Return Условный переход: On выражение GoSub списокНазначений perem = 3 On выражение GoTo списокНазначений On perem GoTo Metka1, Metka2, Metka3 выражение - любое числовое выражение, которое имеет целое значение от 0 до 255 включительно. списокНазначений - список номеров строк или меток строк, разделяемых запятыми. Временная остановка программы 1) Инструкция Stop - не закрывает файлы и не очищает переменные, аналогична установке точки останова. 2) Функция DoEvents временно передает управление операционной системе. Управление возвращается после завершения обработки операционной системой всех событий из своей очереди. Если часть программы занимает основное процессорное время, следует периодически использовать функцию DoEvents для отказа от управления в пользу операционной системы, чтобы такие события как ввод с клавиатуры и нажатия кнопок мыши могли быть обработаны без существенной задержки. Пример: rez=DoEvents(). Операторы выбора 1) Инструкция If...Then...Else, допускается вложение одной инструкции If в другую. 2) Инструкция Select Case: Number = 8 Select Case Number Case 1 To 5 Debug.Print " Числа между 1 и 5" Case 6, 7, 8 Debug.Print " Числа между 6 и 8" Case Is > 8 And Number < per1 Debug.Print " Числа больше 8 и меньше значения переменной per1" Case “орехи” To “яблоки” Debug.Print " Слова, лежащие по алфавиту между орехами и яблоками" Case Else Debug.Print " Другие значения." End Select 3) Функция Choose - возвращает значение, выбранное из списка аргументов:  Ляхевич А.Г., 1998-1999 год rezultat=Сhoose(nomer, “Страна”, “Город”, “Улица”, “Адрес”) - если значение переменной номер =1, то в переменную rezultat возвращается “Страна”, 2- “Город” и т.д. Конструкция With .. End With Инструкция With позволяет выполнить последовательность инструкций над указанным объектом, не повторяя задание имени объекта. With объект [инструкции] End With Объект - имя объекта или переменной типа, определяемого пользователем. With MyAdres . State = “Белорусь” . City = “Минск” End With Организация циклов Конструкция For .. Next For i = 1 to 100 Step 2 Beep if ... then Exit For Next i Конструкция For Each .. Next используется только для массивов и семейств Dim TestArray (10) As Integer Dim i as Variant For Each i In TestArray TestArray(i) = 30 if ... then Exit For Next i Повторение инструкций, пока условие имеет значение True (цикл While) Do While условие .... инструкции .... Loop Do .... инструкции .... Loop While условие Повторение инструкций, пока условие не примет значение True (цикл Until) Do Until условие .... инструкции .... Loop Do .... инструкции .... Loop Until условие Инструкцию Do...Loop можно завершить с помощью инструкции Exit Do. Для прекращения бесконечного цикла используются клавиши ESC или CTRL+BREAK. Вызов подпрограмм и других приложений 1) Инструкция Call - передает управление в процедуру Sub, функцию Function или процедуру библиотеки динамической компоновки (DLL). Не обязательно применять ключевое слово Call при вызове процедуры. Однако, если ключевое слово Call используется, то списокАргументов должен быть заключен в скобки. Пример: Call MyProgram (10, 20, 30) или MyProgram 10, 20, 30 2) Функция Shell - запускает исполняемую программу и при успешном запуске программы возвращает идентификатор (ID) запущенной программы. Идентификатор ID является уникальным номером, указывающим на выполняемую программу, и имеет тип Variant (Double). При невозможности запустить программу возвращается 0. Синтаксис: Shell (pathname[,windowstyle]). Пример: RetID = Shell("c:\windows\calc.exe", 1) pathname Значение типа Variant (String). Имя выполняемой программы и любые требуемые ключи командной строки. Допускается включение в имя диска и каталога. windowstyle Значение типа Variant (Integer), соответствующее типу окна, в котором выполняется программа. Если аргумент windowstyle опущен, программа запускается в свернутом окне и получает фокус. Значения Windowstyle: Константа Значение Описание vbHide 0 Окно скрыто, и фокус передается скрытому окну. vbNormalFocus 1 Окно имеет фокус и восстанавливает свои стандартные размер и положение. vbMinimizedFocus 2 Окно отображается в виде значка с фокусом. vbMaximizedFocus 3 Окно развертывается на полный экран с фокусом. vbNormalNoFocus 4 Восстанавливаются предыдущие размер и положение окна. Активным остается текущее окно. vbMinimizedNoFocus 6 Окно отображается в виде значка. Активным остается текущее окно. 3) Инструкция AppActivate - активизирует окно уже запущенного приложения. AppActivate title[, wait] title Строка заголовка окна приложения, которое следует активизировать. Title последовательно сравнивается со строкой заголовка каждого приложения, находящегося в памяти компьютера. При отсутствии точного совпадения активизируется приложение, строка заголовка которого начинается с title. Можно вместо title использовать идентефикатор задачи ID, возвращаемый функцией Shell. wait Необязательный. Выражение типа Boolean, указывающее, должно ли вызывающее приложение иметь фокус при активизации другого приложения. Если этот аргумент имеет значение False (по умолчанию), указанное приложение активизируется немедленно, независимо от наличия фокуса у  Ляхевич А.Г., 1998-1999 год вызывающего приложения. Если этот аргумент имеет значение True, указанное приложение активизируется только после получения фокуса вызывающим приложением. Обработка ошибок On Error GoTo метка В случае ошибки, управление передается на метку. Метка должна находиться в той же процедуре, в которой находится инструкция On Error. On Error Resume Next Указывает, что возникновение ошибки выполнения приводит к передаче управления на инструкцию, непосредственно следующую за инструкцией, при выполнении которой возникла ошибка. Программа продолжается несмотря на ошибку. Конструкция On Error Resume Next становится неактивной при вызове новой процедуры, поэтому для внутренней обработки ошибок необходимо выполнять инструкцию On Error Resume Next в каждой вызываемой процедуре. On Error GoTo 0 Отключает обработчик ошибок. Resume Метка Доступна только после возникновения ошибки. Возвращает управление на Метку. Resume Next Возвращает управление на инструкцию после той, где произошла ошибка. Err.Number Код последней ошибки Err.Description Текст сообщения об ошибке, соответствующего коду ошибки Err.Number Err.Source Имя объекта в котором произошла ошибка. Если нет инструкция On Error, то любая ошибка выполнения приводит к завершению программы. Подпрограмма обработки ошибок не может быть процедурой Sub или Function. Эта подпрограмма должна быть частью программы, которая отмечается с помощью метки строки. Системные ошибки при вызовах библиотек динамической компоновки (DLL) не приводят к возникновению исключений и не перехватываются средствами Visual Basic -> проверять Err.LastDllError - системный код ошибки для последнего вызова DLL. Для принудительной генерации ошибки можно воспользоваться методом Raise: Err . Raise номер_ошибки, [“источник ошибки”, “описание ошибки”, “файл справки”, раздел_справки] номер_ Код ошибки (типа Long). В VBA коды ошибок (как внутренних, так и определяемых ошибки пользователем) должны лежать в диапазоне 0–65535. Задавая код ошибки для объекта, создаваемого пользователем, в его модуле класса (см. лекции ниже) пользователь должен сложить код ошибки с константой vbObjectError. Например, для создания в объекте ошибки с номером 1050 надо: номер_ошибки = vbObjectError + 1050. “источник Строка, определяющая имя объекта или приложения, в котором возникла ошибка. Для объекта ошибки” значение данного свойства необходимо задавать в виде проект . класс. Лекция 3 Функции MsgBox, InputBox, разработка диалогов пользователя. Функция MsgBox Выводит на экран диалоговое окно, содержащее сообщение, ожидает нажатия кнопки пользователем, а затем возвращает значение типа Integer, указывающее, какая кнопка была нажата. otvet = MsgBox(prompt[, buttons] [, title] [, helpfile, context]) prompt Сообщение в диалоговом окне. Для разделения строк в сообщении используются символ возврата каретки (Chr(13)), символа перевода строки (Chr(10)) или их комбинацию (Chr(13) & Chr(10)). buttons Число (константа) которые указывают число и тип отображаемых кнопок, тип значка и др. vbOKOnly - отображается только кнопка "OK", VbOKCancel, VbAbortRetryIgnore, VbYesNoCancel, VbYesNo, VbRetryCancel, VbCritical - значок "Критическое сообщение", VbQuestion - значок "Вопрос", VbExclamation - значок "Предупреждение", VbInformation - значок "Информационное сообщение", VbDefaultButton1 - основной является первая кнопка, VbDefaultButton2 (3, 4), VbApplicationModal -модальное окно на уровне приложения: чтобы продолжить работу с текущим приложением, необходимо ответить на данное сообщение, VbSystemModal - модальное окно на уровне системы: все приложения будут недоступны до тех пор, пока пользователь не ответит на данное сообщение. title Заголовок диалогового окна. helpfile, Имя файла справки и номер раздела справки. context Возвращаемые значения функции MsgBox: vbOK, vbCancel, vbAbort, vbRetry, vbIgnore, vbYes, vbNo. Пример: Style = vbYesNo + vbCritical + vbDefaultButton2 otvet = MsgBox("Обнаружена ошибка. Продолжить?", Style, “SOS”) If otvet = vbNo Then Stop  Ляхевич А.Г., 1998-1999 год Функция InputBox Выводит на экран диалоговое окно, содержащее сообщение и поле ввода, устанавливает режим ожидания ввода текста пользователем или нажатия кнопки, а затем возвращает значение типа String, содержащее текст, введенный в поле. otvet = InputBox(prompt[, title] [, default] [, xpos] [, ypos] [, helpfile, context]) prompt Сообщение в диалоговом окне. Для разделения строк в сообщении используются символ возврата каретки (Chr(13)), символа перевода строки (Chr(10)) или их комбинацию (Chr(13) & Chr(10)). title Заголовок диалогового окна. default Строка, отображаемая в поле ввода по умолчанию. xpos Расстояние по горизонтали между левой границей диалогового окна и левым краем экрана. ypos Расстояние по вертикали между верхней границей диалогового окна и верхним краем экрана. helpfile Имя файла справки. Если этот аргумент указан, необходимо указать также аргумент context. context Номер соответствующего раздела справочной системы. Если пользователь нажимает кнопку "OK" или клавишу ENTER, функция InputBox возвращает содержимое поля ввода. Если пользователь нажимает кнопку "Отмена", функция возвратит пустую строку (""). Функцию InputBox с двумя или большим числом аргументов можно использовать только в выражении. Наличие запятых, соответствующих отсутствующим аргументам, является обязательным. Разработка диалогов пользователя 1) Создайте диалог пользователя (Вставка\ UserForm) 2) Используя появившуюся панель “ToolBox”, добавьте элементы управления в диалог пользователя. Элементы управления: Label (надпись), TextBox (поле ввода), ComboBox (раскрывающийся список), ListBox (список), CheckBox (флажок), OptionButton (переключатель), ToggleButton(выключатель), Frame(рамка группы), CommandButton (кнопка), TabStrip, MultiPage (вкладки), ScrollBar (полоса прокрутки), SpinButton (кнопка прокрутки), Image (рисунок из файла), RefEdit(ссылки на ячейки листа Excel). Из переключателей помещенных внутрь одной рамки группы (или при ее отсутствии) только один может быть включен, переключатели помещенные внутрь разных рамок групп не зависят друг от друга. 3) Установить свойства элементов управления. КМ: Свойства \ в окне “Свойства” выбрать вкладку “По кате- гориям”, название свойства и изменить его. Некоторые название свойств: Name - имя элемента управления, Value - значение элемента управления, BackColor - цвет фона элемента, ForeColor - цвет шрифта элемента, Font - шрифт элемента управления, ControlTipText - текст всплывающей подсказки для элемента, Mouse Pointer - вид указателя мыши при наведении на элемент, AutoSize (True - автоматическая подгонка размера элемента под введенные данные), EnterKeyBehaviour - поведение Enter (True - перевод строки, False - при нажатии Enter ввод данных завершается), Special Effect - вид (Raized - приподнятый, Sunken - утопленный), ScrollBars - наличие и вид полос прокрутки у элемента управления (например, элемент TextBox можно сделать в виде окна с полосами прокрутки, которые появятся как только введенная информация не будет помещаться в окне. Не рисовать отдельно полосы прокрутки, а установить это свойство для элемента управления). 4) Инициализировать элементы управления: Во-первых, при инициализации диалога, в зависимости от места программы из которого вызывается диалог, можно устанавливать разные значения свойств элементов управления (цвет поля ввода пароля при ошибочных вводах - зеленый, желтый, красный). Во-вторых, при инициализации можно выполнить действия по преведению элемента управления в рабочее состояние, которые невозможно выполнить при помощи свойств. Например, рассмотрим задание списка значений из которых осуществляется выбор для элемента управления ComboBox (раскрывающийся список). Необходимо выполнить следующий фрагмент программы (метод AddItem): With UserForm1 .СписокМесяцев.AddItem " Январь" .СписокМесяцев.AddItem "Февраль" .СписокМесяцев.AddItem "Март" End With − Можно инициализировать свойства элементов управления из процедуры VBA, перед запуском формы. − Можно создать инициализирующее событие для формы -> инициализация будет выполняться каждый раз при запуске формы. Для этого дважды щелкнув по форме, открыть программы формы и создать там процедуру обработки события Initialize (см. следующий пункт). 5) Написать процедуры обработки событий Все элементы управления в форме имеют список событий. Например, для кнопки существуют следующие события: Click - нажатие кнопки, DblClick - двойной щелчок по кнопке, MouseMove - наведение мыши на кнопку и т.д. Если написать процедуру обработки события, то она будет выполняться каждый раз, когда  Ляхевич А.Г., 1998-1999 год будет происходить это событие. Например, напишем процедуру обработки события, которая при нажатии кнопки выдает сообщение и прячет диалог: − Дважды щелкнуть кнопку, чтобы открыть программы формы или нажать кнопку “Программы” в “Окне проекта” (Вид \ Окно проекта). − Выбрать ИмяКнопки из раскрывающегося списка, выбрать событие “Click” из раскрывающегося списка − Заполнить появившуюся процедуру обработки событий вида: Private Sub ИмяКнопки_Click() MsgBox ("Форма будет закрыта") : UserForm1.Hide End Sub 6) Запустить диалог пользователя из программы -> ИмяФормы.Show 7) Использовать значения элементов управления во время выполнения программы. Например, пусть существует элемент управления типа TextBox (поле ввода), с именем “ФИО”, куда пользователь вводит свою фамилию. Кнопка “Конец” закрывает форму. Необходимо написать процедуру обработки события нажатия кнопки “Конец”, которая сохранит введенную пользователем информацию в переменной типа Public, т.к. после закрытия формы все введенные в нее данные теряются. Соответствующая часть программы будет выглядеть следующим образом: Модуль: Форма: ' Описание переменной для сохранения ФИО ' Процедура обработки события нажатия Public Сохр_ФИО As String кнопки “Конец” ' Запуск формы Private Sub Конец_Click() Public Sub форма() Сохр_ФИО = ФИО.Text UserForm1.Show Unload Me MsgBox (Сохр_ФИО) End Sub End Sub Или вместо Сохр_ФИО = ФИО.Text можно использовать Сохр_ФИО = ФИО.Value. Вообще, для любого элемента управления существует свойство Value, в котором хранится текущее состояние элемента управления. Тип хранящихся данных зависит от типа элемента управления. Например, для флажков, переключателей и кнопок-выключателей, храниться True - включено, или False - выключено. Для списков и раскрывающихся списков в Value находится выбранный элемент списка. Формирование элементов управления ListBox (список) и ComboBox (раскрывающийся список). При создании, список пуст. Чтобы заполнить его: 1) Методы AddItem, RemoveItem - см. раньше. 2) Считывание списка из массива (свойство List) Dim MyArray (10, 3) As Variant : Dim SaveArray (10, 3) As Variant Список.ColumnCount = 3 ' Список в виде трех колонок Список.List() = MyArray ' Считывание списка из массива MyArray Список.List(4,2) = MyArray ' В список из массива считываются не все значения, а только 5 строк (0..4) и 3 колонки (0..2) SaveArray = Список.List() ' Считывание в массив из списка 3) Модификация элементов списка (свойство Column) Список. Column(4,2) = “Январь” ' В списке, в пятой строке (0..4) и третьей колонке (0..2), значение заменяется на “Январь” rez = Список. Column(4,2) ' В перменную rez считывается элемент списка, в пятой строке (0..4) и третьей колонке (0..2) Список. Column () = MyArray ' Считывание списка из массива MyArray Лекция 4. Встроенные функции VBA Встроенные функции VBA для работы со строками Представление строк в VBA (форматы ANSI и Unicode) Формат ANSI : 1 символ = 1 байт , вид символа зависит от установленной в Windows кодовой страницы языка Формат Unicode : 1 символ = 2 байта (1 байт - символ 1 байт - язык), вид символа не зависит от установлен- ной в Windows кодовой страницы - на экране не будет “аброкадабры” при неправильной кодовой странице.  Ляхевич А.Г., 1998-1999 год Текст ANSI Unicode Hello 72 101 108 108 111 72 0 101 0 108 0 108 0 111 0 VBA хранит строки в формате Unicode, поэтому каждая строка занимает (длина*2) байт. Это необходимо учитывать при копировании строк в байтовый массив, хотя для побайтовый обработки строки лучше воспользоваться функциями MidB и др. (см. ниже). В строках также нельзя хранить байтовые данные, т.к. любая строка автоматически преобразуется в формат Unicode, что разрушит целостность данных. Вычисление длины строки : длина_строки = Len ( “Строка” ) Сравнение строк : Оператор Option Compare дожен стоять в начале каждого модуля и указывает как сравнивать строки в пределах данного модуля Option Compare Binary сравнение с учетом регистра Option Compare Text сравнение без учета регистра Option Compare Database сравнение для баз данных Оператор Like: If строка1 Like “образец” then If строка2 Like “ М??[и-я]н[срт]кин[!АБВГД]### * ” then ? Любой одиночный символ. * Любое количество символов или отсутствие символа. # Любая одиночная цифра (0–9). [список] Любой одиночный символ, входящий в список. [!список] Любой одиночный символ, не входящий в список. Оператор StrComp - сравнивает строки независимо от порядка сравнения, установленного по Option Compare. StrComp (“строка1”, “строка2”, как_сравнивать) как_сравнивать: VbBinaryCompare, VbTextCompare, VbDatabaseCompare Преобразование строк: строка_выхода = StrConv(“строка_входа”, как_преобразовать) как_преобразовать: vbUpperCase, vbLowerCase, vbProperCase (первые буквы слова - заглавные), vbUnicode(строку в формат Unicode), vbFromUnicode (строку из формата Unicode) Формирование строк: строка_из_пробелов = Space (число_пробелов) строка_из_а = String (число_повторов, “символ”) rez = (10, “а”) : rez = (10, 97) ‘ код “а” = 97 Форматирование строк: форматированная_строка = Format ( “строка”, “шаблон формата1; шаблон формата для пустого значения”) rez = Format ( “55512300”, “(&&&) @@@ - @@ - @@; Телефона нет”) => () 555-123-00 @ - символ или пробел 0 - символ или 0 & - символ или пустота < - все символы справа будут строчными > - все символы справа будут прописными ! - замещение строки-шаблона реальными символами слева-направо (по умолчанию - справа-налево). Выравнивание строк: строка1 = “1234567” : Lset строка1 = “Привет” => “Привет_” Rset строка1= “Привет” => “_Привет” Применяется также для перекрытия данных одного пользовательского типа данными другого пользова- тельского типа. Пример: строка1 = “Иванов Александр Викторович” type ФИО : фамилия As string*10 : имя As string*10: отчество As string*10 : End Type dim запись1 As ФИО : Lset запись1 = строка1 : Debug.Print запись1. имя Поиск подстроки в строке: N_позиции_в_строке = InStr ([позиция_начала_поиска, ] “где искать”, “что искать” [, как_сравнивать]) pos = InStr ( 2, “Это не игры - это жизнь”, “это”, vbText ) => результат: pos = 15 Работа с фрагментами строк: Функция Действие Пример Left Возвращает первые N символов строки otv = Left (“Это не тест”, 3) => “Это” LeftB Возвращает первые N байт строки otv = LeftB (“Это не тест”, 6) => “Это”  Ляхевич А.Г., 1998-1999 год Right Возвращает последние N символов строки otv = Right (“Это не тест”, 4) => “тест” RightB Возвращает последние N байт строки otv = RightB (“Это не тест”, 8) => “тест” Mid Mid (“строка”, начальная_позиция, otv = Mid (“Это не тест”, 5, 2) => “не” MidB длина) Mid (“Это не тест”, 5, 2) = “да” => “Это да тест” MidB - тоже самое, но по байтам Asc Возвращает код символа rez = Asc(l) => 108 Chr Возвращает символ по коду rez = Chr(108) => “l” AscB, ChrB - тоже самое, но возвращает всегда 1 байт кода или 1 байт символа. Используется для работы со строками по байтам. Функции кончающиеся знаком $ и без него Все функции работы со строками, заканчивающиеся знаком $, работают только с типом String. Без знака $ - работают с типом Variant, но действуют медленней. Встроенные функции VBA для работы с датой и временем Представление дат и времени в VBA , установка текущей даты и времени. В программах на VBA дата и время записываются следующим образом: Date = # 1/ 21/ 2001 # ' системная дата компьютера устанавливается на 21 января 2001 года Time = # 23:00 # ' системное время устанавливается на 23:00 Time = # 11:00:59 PM # ' системное время устанавливается на 23:00:59 Установка текущей даты и времени возможна также и с использованием функций DateSerial и TimeSerial, возвращающих строки # дата # и # время # на основе вычисляемых в программе переменных типа Integer. Пример: год = 2000 + 1 : месяц = 1 : число = 2*10+1 : Date = DateSerial ( год , месяц, число) часы = 200 / 10 + 3 : минуты = 0 : секунды = 0 : Time = TimeSerial (часы, минуты, секунды + 59) Значения даты можно корректировать и непосредственно, без использования переменных. Пример: Date = Date + 2 ' устанавливается послезавтрашняя дата. (Подробнее см. раздел “Вычитание и сложение дат”.) Получение текущей даты и времени в VBA Функция Возвращает Пример Now Текущее значение даты и времени сейчас = Now Date Текущее значение даты if Date > # 5/ 30 / 97# then ... Time Текущее значение времени if Time > #23:00# then ... Year ( #дата# ) Выделяет часть даты - год if Year (Now) = 1999 then ... Month ( #дата# ) Выделяет часть даты - месяц if Month (Date) < 12 then ... Day ( #дата# ) Выделяет часть даты - число число = Day ( # 7/ 31/ 2001# ) WeekDay (#дата# , день_начала_недели) - определяет день недели. if WeekDay (Now, vbMonday) = 7 then возвращает число: 1 - первый день недели, 7 - последний и т.д. MsgBox (“ Сегодня воскресение”) день_начала_недели - это с какого дня начинается неделя. Может End If быть одной из констант: vbUseSystemDayOfWeek (начало недели - в зависимости от национальной настройки Windows), vbSunday (воскресение), vbMonday(понедельник), vbTuesday (вторник) и т.д. Hour (#время#) Выделяет часть времени - часы часы = Hour (Now) Minute (#время#) Выделяет часть времени - минуты минуты = Minute(Time) Second (#время#) Выделяет часть времени - секунды секунды = Second ( # 23:00:59 #) DateValue (# дата Выделяет только дату из комбинации даты и if DateValue (Now) > # 5/30/ 97# then и_время#) времени, получаемых по Now и др. функциям. TimeValue (# дата Выделяет только время из комбинации даты и if TimeValue (Now) > # 23:00 # then и_время#) времени, получаемых по Now и др. функциям. Timer Число секунд, прошедших после полуночи. start = Timer : задержка = 10 Может использоваться для организации Do while Timer < start+ задержка задержки выполнения программы на N секунд Loop Выделение части даты, функция DatePart В полученной дате можно выделить отдельные ее части - год, месяц, число и др. Для этого необходимо вос- пользоваться либо функциями, приведенными в предыдущей таблице, либо универсальной функцией DatePart: DatePart (“единица_измерения”, дата [, день_начала_недели , первая_неделя_года])  Ляхевич А.Г., 1998-1999 год

See more

The list of books you might like

Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.