Справочник от Автор24
Поделись лекцией за скидку на Автор24

Язык программирования Visual Basic for Application. Структура программы на языке. Операторы присваивания, ввода и вывода

  • ⌛ 2019 год
  • 👀 342 просмотра
  • 📌 310 загрузок
  • 🏢️ Кузбасский государственный технический университет
Выбери формат для чтения
Загружаем конспект в формате pdf
Это займет всего пару минут! А пока ты можешь прочитать работу в формате Word 👇
Конспект лекции по дисциплине «Язык программирования Visual Basic for Application. Структура программы на языке. Операторы присваивания, ввода и вывода» pdf
Министерство образования и науки России Федеральное государственное бюджетное образовательное учреждение высшего образования «Кузбасский государственный технический университет имени Т. Ф. Горбачева» Е. А. Рябова ИНФОРМАТИКА Конспект лекций Кемерово 2019 2 СОДЕРЖАНИЕ Раздел 1.Язык программирования Visual Basic for Application (VBA) 1.1.Среды разработки программ VBA. Элементы среды разработкипрограмм VBA. Структура программы на языке VBA. Операторыприсваивания, ввода и вывода дан. Операторы организациициклов.ных.е VBA. 1.2.Среды разработки программ VBA. Элементысреды разработки програм. 1.3.Структура типов данных языка VBA. Встроенные функции языка VBA. Операторы выбора на языке VBA. 1.4.Массивы. Операции с матрицами. 1.5.Среды разработки программVBA. Элементы среды разработки програм. 1.6.Структура типовданных языка VBA. Встроенные функции языка VBA. Операторывыбора на языке VBA. Массивы. Операции с матрицами. Раздел 2. Структура программы на языке. Операторы присваивания,ввода и вывода.Операторы организации циклов в VBA. 2.1.Средыразработки программ VBA. Элементы среды разработки програм. 2.2.Структура типов данных языка VBA. 2.3. Встроенные функции языкаVBA. 2.4. Операторы выбора на языке VBA. 2.5. Массивы. 2.6.Операции с матрицами Раздел 3. Операторы присваивания, ввода и вывода данных. 3.1.Встроенные функции языка VBA. 3.2. Операторы выбора на языке VBA.2 Раздел 4. Работа со строковыми данным. Комбинированные типы(записи). Алгоритмы сортировки данных. Множественный тип данных. 4.1.Файловые типы. 4.2. Виды алгоритмов сортировок (Пузырьковая,Шейкер и другие) Раздел 5. Пользовательские процедуры на языке VBA. 5.1. Виды,структура и возможности процедур на VBA.Комбинированные типы(записи). 5.2.Файловые типы. 5.3.Структура типов данных языка VBA. Раздел 6. Алгоритмы сортировки данных. 6.1. Виды алгоритмовсортировок (Пузырьковая, Шейкер и другие) Раздел 7. Среды разработки программ VBA. 7.1.Элементы средыразработки программ VBA.Раздел 7.2.Структура программы на языкеVBA. 7.3.Структура типов данных языка VBA. 3 ВВЕДЕНИЕ В VISUAL BASIC. Решение какой либо задачи с помощью компьютера требует ввода в него последовательности команд, которые называются программой Программы пишутся на том или ином языке, понятном компьютеру. Такой язык называется алгоритмическим. Мы будем изучать Visual Basic (VB)/Выбор языка объясняется тем, что VB используется в популярном пакете Microsoft Office, в частности в табличном процессоре Excel. Visual Basic является штатным языком программирования. Visual Basic — это среда разработки программ, которая позволяет быстро и легко создавать приложения (прикладные программы) для Windows. В нее включено все, что необходимо для создания, модификации, тестирования, корректирования и компиляции ваших программ: •Средства управления, с помощью которых вы создаете пользовательский интерфейс ваших программ, различные экранные объекты (окна, кнопки, текстовые панели, панели меню и т. д.), при помощи которых пользователи будут взаимодействовать с вашей пролграммой. •Редактор, при помощи которого вы создаете и редактируете программный код. •Отладчик, с помощью которого вы тестируете и исправляете вашу программу. •Компилятор, при помощи которого вы создаете "отдельную" программу для Windows после завершения ее разработки в среде Visual Basic. Visual Basic — это полноценный язык программирования высокого уровня. Термин "Язык высокого уровня" означает, что одна команда Visual Basic вызывает выполнение десятков, а иногда и сотен машинных команд. При этом вы отдаете общие распоряжения и предоставляете самому Visual Basic разбираться, как именно их следует выполнять. Слово Visual "визуальный" ("наглядный") означает способ разработки пользовательского интерфейса программы. Вы "рисуете" окна, кнопки, текстовые панели, линейки прокрутки и другие компоненты пользовательского интерфейса подобно тому, как рисуют объекты в графическом редакторе для Windows. Basic ("основной") описывает тип программного кода, который вы создаете. Программа Visual Basic представляет собой вариант хорошо известного языка программирования Бейсик (Beginner's АН-Purpose Symbolic Instruction Code — символический командный код общего назначения для начинающих). Visual Basic выпускается в нескольких версиях. • (Учебная редакция). Эта версия идеально подходит для начинающих и включает все необходимое для создания программ, работающих в Windows. 4 • (Профессиональная редакция). Содержит дополнительные компоненты ActiveX, ускоряющий работу программ компилятор и расширенные средства управления базами данных. Эта версия предназначена для разработки серьезных приложений. • (Редакция для предприятий). Позволяет разрабатывать приложения с большими многопользовательскими базами данных и включает средства для совместной разработки приложений группами программистов. • Visual Basic for Applications (Visual Basic для приложений). Эта версия входит в состав Microsoft Office. Если у Вас есть полная версия Office или любой из б • компонентов пакета, то у Вас уже сеть версия Visual Basic для приложений. Что может Visual Basic? Visual Basic позволяет вам создавать прикладные программы, которые могут: • Использовать стандартные элементы пользовательского интерфейса Windows, такие как окна, меню, кнопки, панели прокрутки и т. п. • Создавать, читать и записывать текстовые, двоичные файлы и файлы баз данных. • Выводить данные на печать при помощи стандартных драйверов принтеров Windows. • Читать документы в форматах Windows Bitmap, Metafile и PC Paintbrush. • Обращаться к базам данных таких форматов, как SQL, dBase, Microsoft Access и других. • Взаимодействовать с другими прикладными программами через буфер обмена, DDE (Динамический Обмен Данными) и OLE (Связывание и Встраивание Объектов). • Использовать последовательные порты для связи с модемами и другими устройствами. Вы можете применять Visual Basic для создания любых программ — от простых до развитых полноценных систем (в том числе текстовых процессоров, настольных издательских систем, систем управления базами данных и т. п.). Примечание. Для действительно сложных прикладных систем вам могут понадобиться дополнительные возможности, которые имеются в расширенной системе Professional Edition of Visual Basic. ПРОЦЕДУРНОЕ ПРОГРАММИРОВАНИЕ И ПРОГРАММИРОВАНИЕ, УПРАВЛЯЕМОЕ СОБЫТИЯМИ В Visual Basic вы разрабатываете не процедурные программы, а программы, управляемые событиями. В процедурных программах 5 (написанных на традиционных языках программирования, например на стандартном Бейсике) сама программа определяет, какую часть, когда выполнять. Работа программы идет в определенной (хотя и гибкой) последовательности. В программе, управляемой событиями (например, написанной на Visual Basic) именно они, события (действия пользователя такие, как щелчки мышью или системные события, например такие, как истечение определенного интервала времени), определяют, какие части программы должны исполняться. Выполнение программы зависит от происходящих событий, которые, в свою очередь, зависят от того, что и когда делает пользователь. ОСНОВНЫЕ КОМПОНЕНТЫ СРЕДЫ VISUAL BASIC. Компонент Функция Окно Microsoft Visual Содержит панель заголовка, панель меню и панель инструментов Basic Панель меню Содержит возможности, позволяющие вам разрабатывать прикладные программы в среде Visual Basic Панель инструментов Содержит пиктограммы, позволяющие быстро вызывать часто используемые команды. Набор инструментов Содержит средства управления, позволяющие Вам вставлять в свои прикладные программы такие элементы, как кнопки, текстовые и диалоговые окна. Окно проекта Перечисляет файлы, входящие в Ваш проект. Окно форм Появляется как окно при работе прикладной программы. Окно параметров Позволяет Вам менять параметры компонентов Вашего проекта. Окно свойств. Свойство — это некий атрибут объекта, например, его цвет или название. Устанавливая значение какого-либо свойства, Вы определяете соответствующий атрибут или поведение объекта. Окно Properties (Свойства) позволяет определять свойства объекта на этапе разработки программы. Оно весьма полезно при работе с элементами управления (на базе ActiveX) и с собственными диалоговыми окнами. Окно проекта. Весь код, связанный с рабочей книгой, документом, шаблоном или презентацией, размещается в проекте, автоматически сохраняемом вместе с соответствующим документом Office. С помощью окна проекта в редакторе Visual Basic можно просматривать и изменять содержимое проектов для любых книг, документов, шаблонов или презентаций — открытых или тех, на которые есть ссылки.. В состав проекта могут входить объекты приложения, с которыми связаны события, пользовательские диалоговые окна (называемые в окне проекта формами), стандартные модули, модули классов и ссылки 6 В окне проекта присутствует по одному проекту на каждую (открытую или ту, на которую есть ссылки) рабочую книгу, документ, шаблон или презентацию. В этих проектах Вы можете встретить объекты (например, Document, Workbook или Worksheet), распознающие события; формы (называемые так же User Forms) с описаниями пользовательских диалоговых окон и кодом управляющим этими окнами, стандартные модули с кодом, не связанным с конкретным объектом или формой, модули классов с информацией о пользовательских типах объектов, ссылки на другие проекты Окно программы Окно программы предназначено для написания, редактирования и просмотра программного кода (программы). В окне программы одновременно можно увидеть тексты нескольких процедур и функций, а также только одну процедуру. ЭТАПЫ СОЗДАНИЯ ПРИКЛАДНОЙ ПРОГРАММЫ НА VISUAL BASIC. Создание прикладной программы состоит из трех основных этапов: 1. Планирование пользовательского интерфейса. 2. Установка параметров. 3. Написание текста программы. Создание программы на Visual Basic это интерактивный (диалоговый) процесс. Вы можете повторять три перечисленных этапа снова и снова много раз, пока Вы создаете, тестируете и исправляете прикладную программу. Например, вы можете спланировать команды меню, которое появится в Вашей программе, установить их параметры, а затем написать текст программы, который заставит команды выполнять предназначенные операции (такие, как сохранение файла, поиск текстовой строки и т.п.). После того как Вы закончите выполнение этих шагов, можете запустить программу и посмотреть, работает ли она так, как от нее требуется. Если команды меню не работают правильно, Вы можете изменить способ их организации и их параметры или переписать текст программы, если это необходимо. Этап 1. Типичная прикладная программа для Windows содержит много стандартных элементов, в том числе окна, кнопки, меню, текстовые окна, линейки прокрутки и т.п. Эти элементы, называемые управляющими объектами или средствами управления, позволяют пользователю взаимодействовать с программой; все в целом они составляют пользовательский интерфейс прикладной программы. Пользователи Windows ожидают, что если в программе появляются определенные средства управления, то они будут вести себя соответствующим образом. Например, пользователь ждет, что команды File, Save as откроют диалоговое окно, которое позволит пользователю сохранить файл, задав его имя и путь (диск и каталог). Стандартизация пользовательского интерфейса делает освоение новых 7 программ Windows относительно нетрудным для пользователей. В этом Windows отличается от DOS, где практически каждая программа предлагает свой собственный пользовательский интерфейс. Такая стандартизация упрощает программирование в среде Windows, так как не приходится изобретать новый пользовательский интерфейс для каждой Вашей программы. Этап 2. Средства управления это "кирпичи" прикладной программы Windows. Каждое средство имеют уникальный набор характеристик или параметров, которые определяют их внешний вид и поведение. Например, командная кнопка "ОК" может иметь следующие параметры: надпись "ОК" будет выполнена полужирным рубленым шрифтом высотой 8,25 пункта; ширина кнопки будет составлять один дюйм, высота - 0,5 дюйма; индекс табуляции будет равен 0, это означает, что кнопка будет активна при первом появлении окна на экране и т.д. Каждое средство управления имеет параметр имя, которое будет отличать его от всех остальных средств управления в Вашей программе. (Другие объекты, такие, как меню или формы тоже обладают параметрами.) Прочие параметры зависят от типа средства управления: каждое средство имеет собственный набор параметров, связанных с ним. Например, формы обладают параметром MaxButton, который определяет будет ли форма иметь кнопку "Развернуть". Для командных кнопок это не имеет смысла, поэтому они не обладают данным параметром. Чтобы задать параметры средств управления: • Отметьте требуемое средство управления, затем выберите View, Properties (или F4), чтобы параметры средства управления были показаны в окне Properties. • Выберете нужный параметр из списка параметров. • Введите новое значение параметра. Этап 3. Большинство средств управления не могут правильно работать, пока вы не напишите текст, заставляющий их реагировать на определенные события. Например, когда вы только что создали командную кнопку, она может выполнять некоторые примитивные действия: "нажиматься" и "выскакивать", когда вы щелкаете на ней мышью. Такое поведение общее практически для всех кнопок, так что Visual Basic предоставляет вам его "бесплатно". Однако функциональное назначение командной кнопки должен определять программист. Когда Вы щелкаете на этой кнопке, она может отпечатать документ, набрать телефонный номер и т.п. (что именно будет делать кнопка - определяете Вы, назначая для нее соответствующий текст программы). 8 НАПИСАНИЕ НОВОЙ ПРОГРАММЫ Язык Visual Basic содержит несколько основных программных конструкций - структур и символических элементов, которые являются строительными блоками для программ на VB. В число таких конструкций входят утверждения, процедуры, функции, методы, параметры, события и операторы. Утверждения. Утверждение - это синтаксически законченная единица, обычно одна строка программы, которая выполняет действие или определяет переменную. Некоторые утверждения содержат аргументы, которые определяют, как в точности должно выполняться данное действие. Примеры типичных утверждений: Утверждение Что оно делает FileCopy sourceFile destFile Копирует файл sourceFile, заданный переменной, в файл, заданный переменной destFile Beep Подает звуковой сигнал через динамик компьютера NumTimes = 29000 Присваивает переменной NumTimes значение 29000 Dim NumTimes As Integer Объявляет NumTimes целой переменной Процедуры Процедура - это последовательность утверждений программы, выполняемых как единое целое. Процедура — это блок кода между операторами Sub и End Sub или Function и End Function. В Visual Basic можно создавать процедуры двух типов: Sub и Function Процедура типа Sub — блок кода, заключенный между операторами Sub и End Sub, он выполняет какую-то операцию, но значения не возвращает. Процедура типа Function — блок кода, заключенный между операторами Function и End Function; он тоже выполняет определенную операцию, но при этом обязательно возвращает какое-нибудь значение. Примеры процедур: Процедура Что она делает Sub addNums Процедура addNums складывает числа от 1 до 8 и NumSum=l+2+3+4 помещает результат в переменную numSum Sub addNumsLoop Процедура AddNumsLop использует для NumSum=0 достижения той же цели, что процедура For numToAdd=T To 8 addNums, простой цикл NumSum = NumSum + numToAdd Function AddThree (OriginalValue As Процедура-функция AddThree к значению Long) переменной OriginalValue добавляет число 3 Открытую процедуру, объявленную с применением ключевого слова Public, разрешается вызывать из любой процедуры любого модуля приложения. 9 Закрытую процедуру, объявленную с помощью ключевого слова Private, можно вызывать только из процедур, содержащихся в том же (что и закрытая процедура) модуле. Процедуры Sub и Function могут быть либо закрытыми, либо открытыми, гримеры закрытых процедур: Private Sub Testl () MsgBox "This is the Testl procedure running" End Sub Private Function AddThree (OriginalValue As Long) AddThree = OriginalValue + 3 End Function Примеры открытых процедур: Public Sub Testl () MsgBox "This is the Testl procedure running" End Sub Public Function AddThree (OriginalValue As Long) AddThree = OriginalValue + 3 End Function Если в объявлении процедуры не указано ни Private, ни Public, то по умолчанию она считается открытой Таким образом следующие процедуры тоже открытые: Sub Testl 0 MsgBox "This is the Testl procedure running" End Sub Function AddThree (OriginalValue As Long) AddThree = OriginalValue + 3 End Function Хотя для создания открытой процедуры использовать ключевое слово Public не обязательно включение его в объявление процедуры упрощает понимание того какие процедуры открытые а какие закрытые. Чтобы функция возвращала значение в ней должен быть оператор который присваивает это значение имени функции В следующем примере значение, присваиваемое ConeSurface, и будет значением, возвращаемым функцией: Function ConeSurface (radius, height) Const Pi = 3.14159 coneBase = Pi * radius 10 л 2 coneCirc = 2 * Pi * radius coneSide = Sqr (radius л 2 + height л 2) * coneCirc /2 ConeSurface = coneBase + codeSide End Function Данные необходимые процедуре типа Sub или Function для выполнения ее задачи (в предыдущем примере—radius и height), передаются как аргументы. Значение возвращаемое процедурой типа Function можно сделать частью более сложного выражения. Приведенный ниже оператор использует значения возвращаемые функциями ConeSurface и ScoopSurface: totalSurface = ConeSurface (3, 11) + 2 * ScoopSurface (3) Чтобы вызвать процедуру Sub из другой процедуры используйте ее имя по аналогии со встроенными ключевыми словами. Вот пример процедуры, вызывающей процедуру DisplayWelcom: Sub TestCall () D i s p l a y W e l c o m E n d S u b Процедуру объявленную закрытой, нельзя вызывать из процедур за пределами модуля, в котором она находится. В то же время открытую процедуру можно вызывать извне ее модуля. Когда Вы вызываем процедуру, расположенную не в текущем модуле, Visual Basic просматривает другие модули и выполняет первую найденную открытую процедуру с указанным именем. Если имя открытой процедуры не уникально, лучше явно задать модуль в котором она находится. В следующем примере вызывается процедура Sub с именем "DisplayWelcom" из модуля "TestTools": TestTools. DisplayWelcom При необходимости можно указать и проект, в котором находится процедура. Вот пример вызова процедуры Sub с именем "Display-Welcome" из модуля 11 "TestTools", относящеюся к проекту "TestDocument": TestDocument. TestTools. DisplayWelcome Здесь Вы указываете кодовое имя проекта, а не имя документа, с которым связан этот проект. Передача аргументов в процедуру. Если процедуре необходимы дополнительные данные и их нельзя получить из контекста, в котором она выполняется, то эти данные следует передать ей как аргументы. Чтобы указать, что процедура принимает аргументы, перечислите их между скобками за именем процедуры в ее объявлении. Аргументы отделяются запятыми. Объявляя аргумент, можно задать его тип данных с помощью ключевого слова As (изменяет ли процедура значение аргумента, определяется ключевыми словами ByVal и ByRef), а также определить, обязателен ли аргумент, для чего предназначено ключевое слово Optional. Например, объявлена процедура Sub, принимающая 3 аргумента: Sub UpdateRecord (ByVal custld As Long, ByRef custName As String, Optional custRepeat As Boolean) Первый аргумент custld обязателен и передается по значению как тип Long. Если аргумент передается в процедуру по значению, процедура получает лишь копию переменной переданной вызывающей процедурой. Если вызываемая процедура модифицирует это значение, то изменится только копия, а не сама переменная в вызывающей процедуре. Второй аргумент, custName, тоже обязателен, но передается по ссылке как тип String. В этом случае процедура имеет доступ к исходной переменной в памяти и поэтому способна изменить ее значение. Третий аргумент, custRepeat не обязателен и передается по ссылке как тип Boolean (По умолчанию аргументы всегда передаются по ссылке). Q Ц Имя переменной передаваемой в процедуру необязательно должно совпадать с именем аргумента в объявлении этой процедуры. О ^ ^г^^&ункции Функция - это процедура, которая выполняет действие и возвращает значение. Если функция принимает аргументы, то их заклю-чают в скобки () справа от имени функции. Примеры функций: Утверждение, содержащее Что оно делает функцию UName = uCase(userName.- Функция uCase возвращает текстовую строку, в которой Text) буквы строки аргумента превращены в прописные. В дан примере uCase возвращает набранный прописными букв вариант содержимого текстового окна userName, кото присваивается переменной uName 12 StartTime = Now Функция Now, которая не требут аргументов (отсю отсутствие скобок () справа от ее имени), возвращ текущие время и дату, обращаясь к часам компьютера данном примере Now возвращает время и дату, котор присваиваются переменной StartTime Методы. Метод - это процедура, которая работает с объектами определенного типа (формой, текстовым окном и т.п.). Методы для данного объекта определяют набор действий, которые можно выполнить над объектом. Утверждение, Что оно делает содержащие метод FrmOptions.Show 1 Метод Show выводит форму на экран. В данном примере Show выводит форму frmOptions. Аргумент 1 определяет, что выводимое окно будет ведущим (диалоговое окно, которое заставляет пользователя совершить определенные действия) Printer.EndDoc Метод EndDoc посылает документ на принтер, делая это по умолчанию. Этот метод не требует аргумента Параметры. Параметр - это атрибут, который определяет характеристики или поведение объекта (размер, цвет, наличие или отсутствие рамки управляющего меню и т.п.). Поскольку параметры всегда имеют значения, они во многом похожи на функции. Примеры параметров: Утверждение, Что оно делает содержащее параметр PicMap. Height = Параметр Height определяет высоту объекта (в точках). В newHeight данном примере высота объекта picMap становится равной значению переменной newHeight StartTime=txtStartTime.- Параметр Text определяет содержимое текстового окна, Text комбинированного окна или списка. В данном примере содержимое текстового OKiiatxtStartTime копируется в переменную StartTime События. Событие - это действие, такое, как щелчок мыши или нажатие клавиши, которое распознается объектом и на которое объект реагирует. Каждый тип объекта имеет определенный набор действий, на которые он реагирует. Точную реакцию задаете Вы, программируя соответствующую процедуру обработки события для данного объекта. Имя процедуры обработки события включает в себя имя объекта, за которым следует символ подчеркивания, а за ним имя события. Например: Процедура обработки Что она делает события 13 Sub cmdOK_Click() Txt01dlist.txt ="" End Sub Процедура обработки события cmdOK Click стирает содержимое текстового окна txtOldlist, когда с объектом cmdOK происходит событие Click, иными словами, когда пользователь щелкает на кнопке ОК или нажимает клавишу ускорения для этой кнопки, (присвоение параметру Text объекта txtOldlist значения "" стирает содержимое txtOldlist) Sub txtPassword_change() IftxtPassword.txt = secretWord Then readData End Sub Процедура обработки события Change выполняется всякий раз, когда пользователь меняет, добавляет или стирает символ в текстовом окне txtPassword. Эта процедура проверяет содержимое текстового окна. Если введен правильный пароль, запускается общая процедура readData 14 ТИПЫ ДАННЫХ В Visual Basic, как и во всех языках программирования высокого уровня, для хранения значений используются переменные и константы. В Visual Basic интерпретация значения переменной зависит от ее типа. Например, переменная, которая хранится в памяти как последовательность битов 01001111, представляет или букву О, если переменная является символьной, или число 79, если переменная имеет тип Integer. Объявляя переменную как переменную определенного типа данных, вы сообщаете Visual Basic, какой вид данных эта переменная содержит. Переменные С точки зрения программиста переменная является элементом данных, чье значение может меняться во время выполнения программы. Например, переменная X может быть равна 0, затем -1, затем 32767 и потом снова 0 в течение работы одной процедуры. Для компьютера переменная является областью памяти, чье содержание может изменяться во время выполнения программы. В рамках предыдущего примера переменная X может занимать 2 байта (16 бит) памяти, содержание которых может изменяться от 0 к -1, затем к 32767, потом снова к 0. Основные типы данных Visual Basic №п/ п 1 / 2 уз у 4v Тип данByte Содержит Целое Bool- Целое ean Integer Целое Long Целое Использу емая 1 байт Диапазон Суффикс типа (нет) От 0 до 255 2 байта True или False 2 байта 4 байта От-32768 до 32767 % От-2147483648 до 2147483647 & (нет) 5• Single Число с 4 байта плавающей точкой Отрицательные от-3.402823 ЕЗ ! 8 ДО-1.401298Е-45 Положительные от 1.401298Е45 до 3.402823Е38 6 • Double Число с 8 байтов плавающей точкой Отрицательные # От -0.79769313486232Е308 До -4.94065645841247Е-324 Положительные От 4.94065645841247Е-324 До 1.79769313486232Е308 До @ От -922337203685477.5808 +922337203685477.5807 7V Currency 8 v 9 v Date Число с 8 байтов фиксированной десятичной точкой Дата (месяц/день/год) Object Адрес объекта 8 байтов От 1/1/100 до1/31/9999 (нет) 4 байта Ссылка на любой объект (нет) 15 10 V 11 V String Символьная строка 10 байтов + длина строки (переменной длины); длина строки Variant Любые данные 16 байтов (кроме строк с (для чисел); фиксированной 22 байта + длиной и типов, длина строки определенных (для строк) пользователем) От 0 до 2 миллиардов $ символов для Windows 95 От 0 до 65400 для Windows 3.1 и более ранних версий Любое числовое значение (нет) вплоть до диапазона типа Double (для чисел) Аналогично строкам с переменной длиной (для строк) Примечание 1. W^^f*^ Двенадцатый тип данных, называемый пользовательским (user-defined), является смешанным, позволяющим комбинировать разные элементы из других типов данных. Примечание 2. Для понимания приведенной таблицы необходимо знать следующие определения: 1) Целое - это целое число без десятичной точки. Например, 1, 0, -32767, 17; 2) Число с плавающей точкой - это число с десятичной точкой. Например, 1.5, 0.000, -32767.79; 3) 3.402823Е38 - это число с плавающей точкой в экспоненциальной записи; 4) Используемая память - это объем памяти (в байтах), требуемый для хранения переменной; 5) Диапазон - это минимальное и максимальное значения данной переменной; 6) Объект -это комбинация программного текста и данных, рассматриваемая как один элемент; 7) Суффикс типа данных - это символ, добавленный к имени переменной для указания типа данных переменной. Например, myVar% - это переменная типа Integer; myVar$ - это неременная типа String и т.д. если переменная объявлена явно, то нет необходимости использовать суффикс типа данных при обращении к этой переменной. Переменные могут создаваться простым упоминанием о них в коде или могут быть объявлены заранее. Первый способ создания переменных ("на ходу") имеет два преимущества: 1) Нет необходимости планировать переменные заранее; когда переменная потребуется, то просто нужно придумать ей имя; 2) Не нужно беспокоиться о том, какого типа значение вы собираетесь использовать для переменной. Если же вы хотите создать переменную определенного типа, то используйте суффикс соответствующего типа данных, например: MyVar% - тип Integer; myVar$ - тип String и т.д. Недостатки первого способа создания переменных: 1) Если вы допустите опечатку при повторном использовании переменной, то Visual Basic воспримет ее как новую. Например: Sub My Program () MyVar= 10 16 MyRes = MyVr + 20 MsgBox MyRes End Sub В данном случае Visual Basic воспринимает переменную MyVr новой, и поскольку ей не присвоено никакое значение, присваивает ей значение 0 по умолчанию. 2) Visual Basic, не зная типа значения, которое вы собираетесь присвоить переменной, не ограничивает объем резервируемой для нее памяти. Для небольших программ вы, может быть, никогда не заметите разницы. Для более длинных программ, или повторяющих некоторый шаг много раз, разница в скорости и размере программы может быть значительной. Второй способ - объявление переменных заранее. Объявление переменных заранее открывает много новых возможностей. Объявляя переменные таким образом, вы можете иметь в виду следующие цели: • Сделать так, что Visual Basic будет проверять вводимый вами текст на наличие опечаток; • Использовать для переменной наименьший объем памяти, позволяющий выполнить задачу; • Сделать так, что Visual Basic будет обеспечивать присваивание правильного типа значений переменным; • Создавать переменные, которые могут использоваться разными процедурами; • Создавать переменные, которые будут "запоминать" свои значения. Для того чтобы явно объявить переменную, в программу добавляется строка кода, вся цель которой - сообщить Visual Basic о наличии переменной. Существует ряд способов для явного объявления переменной в зависимости от того, как вы хотите ее использовать. Самый простой способ объявления - использование ключевого слова Dim. Его синтаксис таков: Dim varname [As type] Varname - это имя переменной, type - ее тип данных. Например, следующее утверждение Dim объявляет переменную carNumber как переменную типа Integer: Dim carNumber As Integer. Отметим, что в синтаксисе утверждения Dim конструкция As type является необязательной (поэтому она заключена в квадратные скобки). Если эта конструкция отсутствует, то Visual Basic предполагает, что тип данных переменной varname - это Variant (любые данные). Например, Dim carNumber объявляет carNumber переменной типа Variant. Имена переменных Имена переменных (как и всего остального, что вы создаете и именуете в Visual Basic) должны подчиняться следующим правилам. Имя переменной: 1. Должно иметь длину от 1 до 40 символов; 2. Должно начинаться с буквы; 3. Должно содержать только буквы, цифры и символ подчеркивания (_); 4. Не должно быть ключевым словом Visual Basic. Тип данных по умолчанию: Variant 17 Многие языки программирования - такие, как Си и Паскаль, - требуют, чтобы вы объявляли все переменные, которые вы используете в ваших программах. Visual Basic, в свою очередь, позволяет вам выбирать: объявлять или не объявлять переменные. Если вы решили не объявлять переменную, Visual Basic автоматически объявляет ее как имеющую тип Variant, который является типом данных по умолчанию. Использование типа данных Variant: за и против Переменные типа Variant могут содержать данные любого типа (кроме пользовательского типа данных). Это, вместе с тем фактом, что вы не должны объявлять переменные типа Variant, делает их удобными для использования, особенно, когда вы собираетесь писать черновую программу. Это плюс, но есть и минусы: так как переменные типа Variant не оптимальны для многих типов данных, они могут неэффективно использовать память и, как следствие, замедлить математические вычисления. Если вы хотите написать быстро работающую программу, которая минимально занимает память, вам надо реже определять переменные типа Variant или не использовать их вовсе. Например, если вы знаете, что переменная всегда будет содержать относительно малые целые величины, программа будет более эффективной, если объявить переменную как переменную типа Integer (которая использует 2 байта памяти), а не типа Variant (которая использует 16 байтов для представления числа). Для того, чтобы установить режим обязательного использования переменных, в ME необходимо в меню "Сервис" выбрать пункт "Параметры", а там отметить пункт "Требовать описание переменных" на вкладке "Модуль". Именованные константы Переменная, как вы знаете, - это величина, которая может изменяться во время выполнения программы. А вот константа - это величина, которая не может изменяться во время выполнения программы. Константы могут быть фиксированными числами (вроде 1048576 - это число байтов в одном мегабайте) или строками (вроде "Variable not defined" - сообщение об ошибке, которым Visual Basic только что наградил вас). Именованная константа - это имеющее смысл название, которому вы присваиваете числовую или строчную константу. Тем самым, вместо того, чтобы каждый раз обращаться к константе буквально (как к 1048576 или к "Variable not defined"), вы можете обращаться к ней по названию (например, ONEMEGABYTE или VARNOT_MSG). Чтобы объявить именованную константу, вы должны использовать утверждение Const. Вот его синтаксис: Const CONST_NAME=constValue CONSTJMAME - это название вашей именованной константы (например, ONEMEGABYTE); ConstValue - это значение константы, которое вы хотите присвоить CONST_NAME (1048576). Программисты обычно используют для именованных констант прописные буквы. Использование именованных констант упрощает написание и модификацию программ и значительно улучшает читаемость ваших программ. Например, сравните две процедуры, приведенные ниже: Sub calctimel () Remainingminutes = 1440 - Spent_minutes End Sub 18 Sub calc_time2 () •I 7 Const MINUTESJNDAY = 1440 Remainingminutes = MINUTESJNDAY Spentjninutes End Sub В процедуре calcjimel () непонятно, что означает константа 1440. В процедуре calc_time2 () совершенно ясно, что означает константа MINUTESJNDAY. Встроенные константы В Visual Basic имеется большое количество встроенных констант - именованных констант, чьи значения определены заранее и которые встроены в этот язык программирования. Так как встроенные константы вмонтированы в VBA, то они не объявляются (в отличие от невстроенных именованных констант). Чтобы просмотреть или вставить встроенные константы в Редакторе VBA нужно выбрать в меню Вид команду Просмотр объек тов.______________ \*.\№,Область видимости и время существования Каждая переменная и именованная константа в программе имеет свою область видимости внутри этой программы. Переменная или именованная константа с локальной областью видимости доступна только процедуре или модулю, в которых она объявлена. Переменная с глобальной областью видимости видна всем модулям программы. Область видимости переменной определяется при описании этой переменной. Именованные константы имеют область видимости, но не имеют время существования (жизни). Время существования определяет, как долго каждая переменная сохраняется в памяти. Область видимости переменных Каждая переменная в программе на VBA имеет одну из следующих областей видимости: 1. Локальная на уровне процедуры (уровень процедуры). 2. Локальная на уровне модуля (личный уровень модуля). 3. Глобальная на уровне модуля (общий уровень модуля). Локальные переменные на уровне процедуры Переменная с такой областью видимости видна только процедуре, где она объявлена. Чтобы создать локальную переменную на уровне процедуры, нужно ее просто объявить внутри процедуры. Если локальные переменные на уровне процедуры не объявлены, то VBA автоматически объявляет их как переменные типа Variant. Переменные, локальные на уровне процедуры, полезны для рабочих вычислений, результаты которых не требуется передавать в другие процедуры. В VBA нет глобальных переменных не уровне процедуры. Все переменные уровня процедуры являются локальными. Например. Dim Number As Integer Локальные переменные на уровне модуля Переменная с данной формой видимости видна всем процедурам своей формы, но не видна процедурам других форм или модулей. Чтобы создать локальную переменную 19 на уровне модуля используется утверждение Private. Если переменной предшествует ключевое слово Private, область определения задается программой пользователя. Переменные уровня модуля полезны для вычислений, результаты которых требуется передавать в другие процедуры той же самой формы или модуля. Например. Private Number As Integer Переменные, описанные с помощью ключевого слова Dim на уровне модуля, доступны для всех процедур в данном модуле. Глобальные переменные на уровне модуля Переменная с данной формой видимости видна всем процедурам во всех формах и модулях всего проекта. Если переменная объявлена как глобальная на уровне модуля, каждая строка программы всех форм и модулей будет обращаться к этой переменной. Для создания глобальной переменной на уровне модуля используется утверждение Public. Глобальные переменные уровня модуля полезны для вычислений, результаты которых должны быть доступны на уровне всего проекта всем формам и модулям. Например. Public Number As Integer Для определения области видимости именованных констант применяются те же правила. Именованную константу, локальную на уровне процедуры или на уровне модуля, объявляют в процедуре или модуле соответственно с помощью ключевого слова Const. А для объявления именованной глобальной константы уровня модуля необходимо вместе с ключевым словом Public ключевое слово Const. Например. Const Number=701 Public Const Number=701 VBA позволяет использовать одни и те же имена переменных или именованных констант, но с разными областями видимости. VBA всегда использует переменную, которая является наиболее "своей" для текущего фрагмента программы. Если одна и та же переменная объявлена как глобальная и как локальная, то в том модуле (процедуре), где она описана локальной, используется локальная переменная, а во всех остальных модулях (процедурах) она будет использоваться как глобальная. Время существования (жизни) переменных Когда процедура завершается, все ее локальные переменные удаляются, освобождая память для повторного использования. Когда процедура запускается еще раз, ее локальные переменные создаются снова, что обнуляет их значения. Объявляя локальную переменную на уровне процедуры как Static, VBA сохраняет ее значение. Так что при следующем запуске процедуры последнее значение этой переменной будет восстановлено. Чтобы объявить статическую локальную переменную на уровне процедуры, вместо Dim используется ключевое слово Static. Синтаксис: Static имя переменной As тип переменной Например. Static Number As Integer Для объявления всех переменных процедуры статистическими следует вставить ключевое слово Static перед заголовком процедуры. Например. Static Sub Num() Переменные уровня модуля всегда статические, они хранятся в памяти на протяжении всей программы. Массивы Массив - это набор переменных одного типа. Массивы используются для группировки логически связанных переменных. Массивы, подобно переменным и именованным константам, имеют область видимости. _________________________Область видимости массивов____________ 20 Область видимости Ключевое слово Локальная на уровне Dim или Static (создает статические Локальная на уровне модуля Dim или Private Глобальная на уровне модуля Public Прежде чем использовать массив, его обязательно нужно явно объявить (неявное объявление массива недопустимо). 21 » Объявляя массив, определяется верхняя и нижняя граница каждой размерности в круглых скобках за именем массива. Если указано только одно значение, оно считается верхней границей, а для нижней границы подставляется значение по умолчанию. Значение по умолчанию равно 0, но его можно приравнять 1. Для этого используется оператор Option Base в Общей области для данного модуля. Синтаксис: Option Base значение. Значение = 0 или 1. Например. Option Base l Если нижняя граница задается явно, то при этом значения верхней и нижней границы разделяются ключевым словом То. Число размерностей массива может достигать 60. Размерности указываются через запятую. Примеры описания массивов: Dim massiv (14) As Integer Dim massiv (100 To 150) As String Dim massiv (4,4) As Double Dim massiv (1 To 4, 1 To 5, 1 To 6) VBA позволяет создавать динамические массивы, то есть такие массивы, размерность которых можно изменять. Динамический массив объявляется так же, как и фиксированный, но без указания размерностей в скобках после имени массива. Например. Dim DinArray () As Integer Нужное число элементов массива определяется в процедуре с помощью оператора ReDim Синтаксис: ReDim [Preserve] имя массива (размерность) [As тип переменной] Ключевое слово Preserve позволяет изменять размер массива без потери его текущего содержимого. При использовании ключевого слова Preserve имеется возможность изменить значение только последней размерности массива и не допускается изменение числа размерностей. Кроме того, при использовании ключевого слова Preserve допускается изменение размера массива только за счет изменения верхней границы индекс; попытка изменить нижнюю границу приведет к ошибке. Если уменьшить размер массива, данные из удаленных элементов будут потеряны. При передаче массива в процедуру по ссылке нельзя изменять размеры массива в процедуре. Например. ReDim DinArray (x+1) ReDim DinArray (10) / ReDim DinArray (2 To 10) О55_L ReDim Preserve (15) ? • ( Чтобы получить значения нижней и верхней границы уже существующего массива используют следующие функции: LBound (имя массива) - определяет нижнюю границу массива; UBound (имя массива) определяет верхнюю границу массива. Например. N = LBound (massiv) V = UBound (DinArray) ReDim Preserve MyArray (UBound (MyArray) + 5) ОКНА СООБЩЕНИЙ (ПРОСТЫЕ ДИАЛОГОВЫЕ ОКНА) Окна сообщений - это диалоговые окна, которые выдают пользователю сообщение и снабжаются одной или более кнопками для выбора. В VBA такие окна создаются с использованием функции или утверждения MsgBox. Синтаксис утверзкдения MsgBox MsgBox <сообщепие> [, тип | [, заголовок | где сообщение - текст, который будет отображаться в диалоговом окне; тип - число, которое задает тип выводимого диалогового окна; заголовок - текст, который будет 22 выводиться в заголовке диалогового окна. В квадратные скобки заключены необязательные элементы. Запятые указывают, что если используется какой-либо из следующих аргументов, то его следует при помощи запятой (или запятых) отделить от предыдущего аргумента. В качестве типа могут быть указаны не только числовые (например 4), но и текстовые константы (например VbYesNo). Значения типа MsgBox Значения Описание типа Выводить только кнопку ОК (Да) 1(VbOKOnly) (VbOKCan- Выводить кнопки ОК и Cancel (Да, Отмена) cel) 2 Выводить кнопки Abort, Retry и Ignore (Прекратить, (VbAbortRetryl- Повторить, Игнорировать) gnore) 3 (VbYesNo- Выводить кнопки Yes, No и Cancel (Да, Нет, Отмена) Cancel) 4 (VbYesNo) Выводить кнопки Yes и No (Да, Нет) 5 Выводить кнопки Retry и Cancel (Повторить, Отмена) (VbRetryCan16 Выводить пиктограмму "Стоп " 32 Выводить пиктограмму "?" 48 Выводить пиктограмму ".'" 64 Выводить пиктограмму информации Кнопка по умолчанию - первая 256 Кнопка по умолчанию - вторая 512 Кнопка по умолчанию - третья Программное ведущее диалоговое окно 4096 Системное ведущее диалоговое окно При использовании MsgBox как утверждения, оно выводит диалоговое окно в соответствии с указаниями, но не сообщает, какую кнопку на нем нажал пользователь. Этого достаточно для диалоговых окон, которые просто информируют о чем-либо и имеют единст венную командную кнопку ОК (например для вывода полученных результатов), Примеры утверждения MsgBox: 1. MsgBox "Это - окно сообщений" (Рис. 1) 2.MsgBox "Это-окно сообщений", 308, "Окно" (Рис.2). Примечание: Тип 308 - это сумма 256, 48 и 4. 23 9 Microsoft Excel Это - окно сообщений OK Окно Это - окно сообщений Yes ,---л Рис.2 X Ввод Введите Ваше имя, пожалуйста ОК У/iПоле для ввода данных Рис.3 Рис.1 MsgBox Значения, (<сообщение> [, тип ] [, функцией MsВозвр Кнопка заголовок ]) щаем которо значе щелкн При использовании MsgBox как функции, она выводит 1 ОК диалоговой окно и сообщает, какую кнопку нажал пользователь 2 Cancel 3 Abort (возвращая соответствующее этой кнопке значение). Это важно, 4 Retry 5 Ignore когда на диалоговом окне есть несколько кнопок. 6 Yes В качестве типа могут использоваться встроенные константы: 7 No VbOKOnly - кнопка OK, VbOK-Cancel - ОК и Cancel (OK, Отмена), VbYesNo - Yes, No (Да, нет) Пример: X= MsgBox ("Окно сообщений", 4+32). Примечание:При этом если пользователь щелкнул на кнопке Yes, то Х=6 (или X=VbYes), а если на кнопке No, то Х=7 (или X=VbNo). Пример: Х= MsgBox ("Окно сообщений", VbYesNo). Окно ввода Возвращаемым значением функции InputBox является любой текст, вводимый пользователем в текстовое поле отображаемого окна ввода. Синтаксис: InputBox (<сообщение> [, заголовок ]). Пример: UserName = InputBox ("Введите Ваше имя, пожалуйста", "Ввод") (Рис. 3) Если информация, которую нужно отобразить в окне ввода или сообщений, слишком длина, чтобы поместиться на одной строке, необходимо разбить ее на несколько строк. Для этого используется специальный символ, называемый символ перевода строки Chr(ii). Пример: MsgBox "Этот запрос" & Chr(13) & "слишком длинный для одной строки" (рис.4) Для разбиения на несколько строк строки программы используется знак нижнего подчеркивания (_), при этом он не влияет на то, как строка отображается в диалоговом окне. Пример: MsgBox "Этот запрос_ слишком длинный для одной строки (рис.5) Microsoft Excel Этот запрос слишком длинный г ------ X Microsoft Excel Этот запрос слишком длинный для одной строки ОК Рис.4 Рис.5 Операторы VBA и функции Описание СтарВозведение в шинс 1 Знак минус 2 Умножение 3 Деление 3 Деление 4 Остаток от 5 Сложение 6 Вычитание 6 Конкатенаци 7 Равенство 8 Меньше 9 Больше 9 Оп е- Сравне ния Обоз на-л * 1 \ Mod + & = < > Логич еский Арифметическ ий Оп е- Обоз на<= >= о Like Is Not And Or Xor Eqv Imp Описание СтарМеньше или равно шинс 9 Больше или равно 9 Неравенство 9 Соответствие 9 Ссылка на один 9 Нет 9 Логическое "и" 10 Логическое"или" 11 Исключающее 12 Эквивалентность 13 Импликация 14 Некоторые встроенные VBA-функции Функция Abs(x) Atn(x) Cos(x) Ехр(х) Int(x) Log(x) Rnd Sgn(x) Описание Модуль Арктангенс Косинус Экспонента Целая часть Натур, логарифм Случайное число в интервале от 0 до 1 Знак числа Функция Sin(x) Sqr(x) Tab(n) Tan(x) Asc(S) Chr(x) Isnumeric(S ) Oct(x) Описание Синус Квадратный корень Табуляция вывода Тангенс Код первого символа Символ, чей код - X True - если S является число False Строка - число в 8-ой СС 10 Функция Описание Right(S,n N символов справа Space(n) Строка из п пробелов Str(x) Число х в виде строки Val(S) Число из строки S Trim(S) Удаление пробелов справа и слева Mid(S,i,n Подстрока длины п с Функция Нех(х) Instr(n,Sl,S2) Left(S,n) Len(S) Ltrim(S) Описание Строка- число в 16-ой СС Вхождение S1 в S2 N символов слева Длина строки Удаление пробелов слева Rtrim(S) Удаление пробелов справа УПРАВЛЯЮЩИЕ КОНСТРУКЦИИ Эти конструкции управляют ходом выполнения программы. В их отсутствие программа выполняется последовательно. Порядок выполнения операторов изменяется за счет операторов ветвления и циклов. ______Операторы ветвления.________________________. Оператор ветвления Назначение If... Then If...Then...Else Проверяется одно условие и выполняется оператор или блок операторов If..Then... Elself Проверяется одно условие и выбирается один из двух блоков операторов Проверяется более одного условия и выполняется один из нескольких блоков операторов Select Case Проверяется условие и в зависимости от значения выполняется один из нескольких блоков операторов Оператор If...Then позволяет выполнять один или несколько операторов, если условие истинно. Можно использовать однострочный или блочный синтаксис. Однострочный: If условие Then действие Блочный: If условие Then действия End If В однострочной форме оператор End If не применяется. Например. 1) If my Var<0 then my Var=0 2) IfmyVar>5Then S=myVar+25 myVar=0 End If Оператор If...Then...Else позволяет определить два блока операторов. Первый блок выполняется, когда условие истинно, а второй - когда оно ложно. Например. 1) If myVar<0 Then myVar=0 Else myVar=l 2) TfmyVaKOThen myVar= 0 Else myVar=l End If Для проверки дополнительных условий не обязательно вкладывать операторы If...Then друг в друга- можно добавить операторы Elself. Например. Необходимо рассчитать премии студентам с учетом их вклада в общее дело. Function Bonus (job, st, norma) If job=l Then Bonus = st*0.1*norma/10 Elself job=2 Then Bonus = st * 0.09* norma/10 Elself job=3 Then Bonus = st * 0.07* norma/10 Else Bonus = 0 End If End Function Оператор Select Case заменяет серию операторов Elself в том случае, когда одно выражение сравнивается с несколькими значениями. Например. Function Bonus (job, st, norma) Select Case job Case 1 Bonus = st * 0.1* norma/10 Case 2 Bonus = st * 0.09* norma/10 Case 3 Bonus = st * 0.07* norma/10 Case 4, 5 {перечисление значений} Bonus = st * 0.05* norma/ 10 Case 6 To 8 {задание диапазона} Bonus =150 Case Is > 8 {сравнение с другими значениями} Bonus =100 Case Else II Bonus = О End Select End Function Операторы циклов Операторы циклов используются для организации повторного выполнения блоков кода. Оператор цикла Назначение Do While...Loop Проверить условие в начале цикла, если оно истинно, перейти к цикла и продолжать, не станет ложным Do I'nil/ Loop выполнению Проверить условие в начале цикла,пока еслиусловие оно ложно, перейти к Do., Loop While Do...Loop Until For... Next выполнению цикла и продолжать, пока условие не станез истинным Выполнить цикл один раз, проверить условие в конце цикла и, если оно истинно,цикл продолжать условие неи,станет Выполнить один раз,выполнять проверитьЦИКЛ, условиепока в конце цикла если оно ложно, продолжать выполнять цикл, пока условие станет Выполнить цикл заданное число раз, используя счетчикнецикла с И конечными значениями, также шагом For Lack... Sexi определенными Выполнить циклначальными по разу для каждого объекта из набора а(группы) Операторы цикла заставляют выполняться входящие в их операторы, утверждения, функции и т.д. (тело цикла) несколько раз. в частности один раз или пи разу. Первые четыре оператора цикла (Do While...Loop, Do Until...Loop, Do...lx>op While, Do...Loop Until) используются в тех случаях, когда заранее неизвестно количество повторений цикла. Особенность циклов Do...Loop While и Do...Loop Until в том. что они выполняются хотя бы один раз. Оператор цикла DO WHILE ... LOOP (цикл с предусловием) Общий вид: Do While A ST Loop где А булевское (логическое) выражение ST- оператор (тело цикла). Значение выражения А вычисляется перед каждым выполнением оператора ST. Если значения А равно True, то оператор ST выполняется и управление передается вновь на вычисление значения А, иначе оператор 57" не выполняется и происходит выход из цикла. Если первоначальное значение выражения А равно False, то оператор AT не будет выполнен ни разу. Чтобы избежать бесконечного повторения, необходимо хотя бы одну переменную, входящую в выражение ,1, изменять в теле цикла. Более того, изменения должны быть таковы, чтобы булевское выражение рано или поздно обратилось в "ложь". 11ример: Вычислить CVMMV S — 1 Ч--------------1 — 2 3 50 Sub Sum (); Dun S As Single Dim N As Integer S=0 N=1 Do While N<=5 условие работы е цикле 4 Л > s, 3 е *"// о <;* Si*"*...i J (.Л S* о W .г) Do Until A ST Loop Значение выражения А вычисляется перед каждым выполнением оператора ST. Если значения А равно True, то оператор ST не выполняется и происходит выход из цикла, иначе оператороГ выполняется и управление передается вновь на вычисление Оператор цикла DO UNTIL ... LOOR{fuiiui с S=S+ предусловием) 1/N N=N +1 1 ,oop MsgBox "S*" & S End Sub Общий вид: 11ример: Вычислить СУММУ S =\ 1/f = 4------------------------------h ... H- 3 50 Sub Sum (); Dim S As Single Dim N As Integer S=0 N=1 Do Until N>5() S=S+1/ N N=N+1 Loop MsgBox "S=" & S End Sub условие выхода из цикла Оператор цикла DO ... LOOP WHILE (цикл с постусловием) Общий вид: Do ST Loop While A Работает оператор гак: выполняются операторы ST, штем вычисляется шачепие выражения А. Если это значение равно True, то вновь выполняются операторы ST, иначе (А = False) - пики заканчивается. Если же значение выражения.1 = False с самого начала, то операторы STвыполняются только один раз. Если А никогда не принимает значения False, то операторы STвыполняются бесконечно (бесконечный цикл). , 1 1I+— 1 5 11ример: Вычислить сумму S Sub Sam (); Dim S As Single Dim N As Integer S=0 N=1 Do S=S+1/N N=N+1 Loop While N<=50 условие раооты в цикле MsgBox "S=" & S End Sub Оператор цикла DO ... LOOP UNTIL (цикл с постусловием) Общий вид: Do ST Loop Until/1 Работает оператор так: выполняются операторы ST, затем вычисляется значение выражения А. Если это значение равно False, то вновь выполняются операторы ST, иначе (.4 = True) - цикл иканчивается. Если же значение выражения А = True с самого начала, то операторы ST выполняются только один раз. Если А никогда не принимает значения True, то операторы ST выполняются бесконечно (бесконечный цикл) 11ример: Вычислить сумму S = Н---------------------------1 50 ----------------------------------Р . 2 3 Sub Sum (); Dim S As Single Dim N As Integer S=0 N=1 Do S=S+1/N N=N+1 Loop Until N>50 условие выхооа in цикла MsgBox "S="&S End Sub Оператор цикла FOR ... NEXT (цикл с параметром) Оператор цикла с параметром используется тогда, когда заранее известно количество повторений цикла. Общий вид: For / = N1 То N2 | Step К \ ST Next |/1 где / - параметр цикла (управляющая переметшая цикла); N1 и N2 - начальное и конечное значения параметра цикла; А" - шаг приращения; ST- оператор (простой либо составной). В квадратных скобках указаны необязательные параметры, т.е. параметры которые могут отсутствовать. Переменная / принимает значения начиная от N1 и увеличивается на каждой итерации цикла на величину А". Цикл завершается когда переменная / достигает заданного значения S2. По умолчанию (если не указан шаг приращения) переметшая 1 увеличивается на каждой итерации цикла на 1. Если в качестве шага А' указать отрицательное число, то счетчик будет уменьшаться на каждой итерации цикла (/ принимает последовательные убывающие шачения от N1 до N2). ,, , 1 1 1 11римср: Вычислить сумму о = 1 Н ----------------------------------1- -Р...Н- 2 3 50 Sub Sum (); Dim S As Single » 13 Dim N As Integer S=0 For N=1 To 50 S=S+ 1/N Next MsgBox "S=" & S End Sub Примечание: 1. Внутри цикла нельзя изменять ни начальное, ни конечное значения параметра цикла. 2. Если в цикле For с положительным шагом самого начала N1>N2, то цикл не выполняется ни разу. 3. Если в цикле For с отрицательным шагом с самого начала N2 *A|^^V ActiveWindow.Caption = "Look up here" MenuBars (xlWorksheets).Menus ("Данные").Caption = "Lor" End Sub Каждая строка в этой процедуре указывает объект и свойство этого объекта, а затем присваивает ему новое значение. Worksheets ("ЛистЗ") ссылается на объект; свойству Name этого объекта присваивается значение "Stock Options". Подобным образом изменяются значения активной ячейки, наименование окна и меню Data. Чтобы вернуть меню процедуры "Данные" в обычное состояние после выполнения процедуры, достаточно выйти из Excel и снова запустить Excel. Пример. Следующая строка кода изменяет шрифт текста в текущей ячейке на полужирный: ActiveCell.Style.Font.Bold = True 2. Чтение значения свойства Некоторые свойства доступны только для чтения, то есть они не могут быть изменены. Можно лишь найти значение свойства с целью получения информации. Ссылка на отдельное свойство - выражение, значение которого является текущим для этого свойства. Можно, например, присвоить его переменной или вывести на экран в окне сообщений. Следующая процедура ищет значения двух свойств, но не изменяет их: Sub ЧтениеСвойств () X = Worksheets ("ЛистГ'). Range ("B6"). Value MsgBox "Этот лист -" & ActiveSheet. Name End Sub Выражение Worksheets ("ЛистГ'). Range ("Вб"). Value возвращает все, что введено в ячейку Вб листа с именем Лист! текущей ра бочей книги. Это значение присваивается переменной X/ ActiveSheet. Name возвращает имя активного в момент выполнения процедуры листа. Это выражение вместе с текстом выводится в окне сообщений. ^ 3. Использование методов В самой простой форме методы выполняют некоторые действия с объектами и наборами. Например, объект - рабочий лист имеет методы Activate и Delete. Следующая строка кода просто удаляет Лист1 из текущей рабочей книги: Worksheets ("ЛистГ). Delete Другие методы делают менее очевидные вещи или используют более сложный синтаксис. 4. Методы, принимающие аргументы Методы могут принимать аргументы. Некоторые методы возвращают значение, поэтому похожи на функции. Некоторые методы выполняют действия, но не возвращают значения, и больше похожи на процедуры. Рассмотрим Add метод в качестве примера. Он может быть использован с различными наборами объектов для добавления нового элемента к набору. Рассмотрим его, чтобы добавить лист к рабочей книге. Примечание. Как воспользоваться этим в реальной жизни? Некоторые макросы предназначены для работы только в определенном рабочем листе. Вы можете проверить, что активный лист - это лист с именем Анализ бюджета, перед запуском макроса, предназначенного для работы только с этим листом. Для этого можно использовать ссылку на свойство имени активного листа в операторе If/Then. Если 16 значение этого свойства равно "Анализ бюджета", то макрос запустится. В противном случае на экран будет выведено соответствующее окно сообщений. Вот процедура, которая добавляет новый модульный лист и помещает его перед Лист2: Sub ДобавлениеНовогоЛиста () Sheets. Add Sheets ("Лист2"),,, xlModule End Sub Sheets. Add указывает VBA добавить лист к текущей рабочей книге. Sheets ("Лист2") является аргументом метода Add. Пробелы, отделяемые запятыми, оставлены там, где могли бы находиться другие аргументы. Последний аргумент xlModule указывает тип листа, который должен быть добавлен - модульный лист. Такие методы, как Add, имеющие несколько аргументов, неудобны для использования. В нашем примере все запятые нужны для того, чтобы можно было воспринимать аргумент xlModule как четвертый аргумент в строке, несмотря на то, что нет второго и третьего. Из-за этого обычно при работе с этими методами используют именованные аргументы. Именованный аргумент- это аргумент, имя которого приводится рядом с самим аргументом. При использовании таких аргументов нет необходимости ставить запятые, оставлять пробелы или сохранять определенный порядок аргументов. Поэтому строка Add из предыдущего примера могла бы быть переписана так: Sheets. Add Before:=Sheets ("Лист2"), Type:=xlModule Слово Before указывает на то, что за ним следует значение аргумента before. После Before следует (:=). Это необходимо при использовании именованных аргументов. После того, как задано значение аргумента Before, применяется запятая для отделения его от следующего аргумента. Далее сразу следует переход к последнему аргументу Туре, минуя второй. Когда вы применяете метод как функцию, необходимо заключать его аргументы в скобки, а при использовании его как оператора этого делать не нужно. Так, например, в строке: Sheets. Add Type:=xlWorksheets скобки не нужны. Если же метод используется также для возвращения некоторого значения, являющегося частью оператора VBA, то следует применять скобки вокруг аргументов, например: Sheets. Add (Type:=xlWorksheets). Name = "Анализ бюджета" Возвращаемым значением является новый лист, и он сразу же используется для установления свойства имени. 5. Методы, возвращающие объекты Для выбора определенного объекта-листа из рабочей книги используется код, подобный следующему: Worksheets ("ЛистГ'). Worksheets является фактически методом, и то, что он "делает" - это выбирает объект из набора. Но вы можете игнорировать тот факт, что Worksheets в этой строке - метод. Более разумно считать его объектом. Такие методы во многом похожи на функции. Они принимают аргумент в скобках. В случае с Worksheets аргументом являлось имя листа, который вы хотели выбрать из набора, а возвращаемым значением - объект (элемент набора). Также подобно функциям они представляют собой выражение, а не законченный оператор VBA. Чтобы преобразовать его в оператор, вам необходимо с ним что-либо сделать. Поэтому полная строка кода, использующая метод Worksheets, могла бы быть следующей: Worksheets ("ЛистГ'). Name = "Мой рабочий лист". 6. Работа с целыми наборами Наборы - это группа схожих объектов. И сам набор тоже является объектом. Можно выполнять действия со всем набором сразу, а не выбирать отдельный элемент. Возможны следующие операции с набором: Подсчет всех объектов в наборе, добавление объекта в набор, закрытие всех членов набора (например, открытых книг), использование цикла For Each для воздействия на каждый объект в наборе. Count и Add -это общие методы, используемые в наборе. SubAddAndCount () MsgBox "В книге имеется " & Sheets.Count & " листов" Sheets.Add MsgBox "Теперь в книге " & Sheets.Count & " листов" End Sub Эта процедура выводит на экран окно сообщений с информацией о количестве листов в текущей рабочей книге. Затем добавляется один рабочий лист, и появляется новое окно сообщений с пересмотренным количеством листов. Примечание. Распространенным сообщением об ошибке является сообщение, что метод объекта завершен неверно. Обычно это вызвано тем, что VBA не может найти объект, на который вы указываете. Рассмотрим процедуру: Sub ChangeName () Worksheets ("ЛистГ). Name = "Viken" End Sub Если ввести эту процедуру в новую рабочую книгу, то можно запустить ее только один раз. Она изменит имя листа Лист1 на "Viken". Однако если вы попытаетесь запустить ее снова, на экран будет выдано окно сообщений с текстом "Метод Worksheets из класса Application завершен неверно". Это произойдет потому, что рабочего листа с именем Лист1 в этой книге больше нет. Вы заменили его на Viken, поэтому VBA не может его найти во второй раз. Поэтому, когда вы получаете сообщение такого рода, проверьте, правильно ли вы указали имя объекта или ссылку на объект. Убедитесь также в том, что VBA ищет этот объект в правильном месте. Если активной является другая книга, в этом и может быть проблема. Просмотр объектов Чтобы легче ориентироваться в мире объектов, в Excel имеется инструмент, называемый Просмотр объектов (Object Browser). Можно использовать Просмотр объектов для того, чтобы узнавать об объектах, их свойствах и методах, и для нахождения процедур в модульных листах. К инструменту Просмотр объектов можно обратиться, выбирая Вид (View), Просмотр объектов (Object Browser), находясь в модульном листе. 1. Использование Просмотра объектов для изучения объектов После того, как вы найдете метод или свойство, которое вас интересует, можете получить справочную информацию по этому разделу или вставить код метода или свойства в модульный лист. Это особенно удобно для методов, принимающих несколько аргументов, поскольку в модуль будут вставлены также и именованные аргументы. Большинство объектов можно найти в библиотеке объектов Excel. Например, для того, чтобы узнать о методах и свойствах Sheets, нужно: 1. В модульном листе нажать F2 для вызова Просмотр объектов. (Или находясь в редакторе Visual Basic, в меню "Вид" выбрать строчку "Просмотр объектов"). 1. Выбрать Excel в верхнем окне <все библиотеки> 17 3. Прокрутить список "Классы" (слева внизу), пока не найдете Sheets. Выделите его. 4. Щелкните на. Add в окне "Компонент". Теперь слева выделен объект Sheets, а справа в окошке изображены его методы и свойства (компоненты), из которых выделено Add. Щелчок на кнопке "?" вызовет раздел справки для метода Add, а на кнопке "Вставить" вставит код: Add (Before:=, After:=, Count:=, Type:=) в модульный лист, который был активным до вызова функции Просмотр объектов. Код вставляется туда, где находился курсор. Вероятно, вам нужно что-либо отредактировать, чтобы код работал правильно. Каждый именованный аргумент должен иметь значение, поэтому, если вы не намерены указывать значение After, вам необходимо убрать часть " After: =, " из списка аргументов. Кроме того, если вы используете метод как оператор, вам нужно будет убрать скобки. Наконец, не забудьте, что вам нужен набор объектов в начале строки. "Очищенная" версия может быть следующей: Sheets. Add Be-fore:=WorkSheets ("ЛистГ), Count:=3 2.Использование Просмотра объектов для поиска процедур Просмотр объектов позволяет просматривать все модули во всех открытых рабочих книгах. Он отображает любые процедуры или макросы, созданные вами. Для поиска процедуры выделите одну из открытых рабочих книг в списке <все библиотеки> окна "Просмотр объектов". Здесь перечислены все открытые книги, включая скрытые. После того, как вы выбрали рабочую книгу, в окне списка "Классы" появится список всех модулей этой книги. Щелкните на модуле, содержание которого вы хотели бы видеть. Это приведет к тому, что в окне "Компоненты" будут отображены все процедуры этого модуля. Щелчок на имени процедуры приводит к появлению ее имени и описания в нижней части окна. 3.Получение списков констант VBA и других полезных элементов Выделяя VBA в списке <все библиотеки>, можно получить списки встроенных элементов VBA. Здесь имеется список всех констант, и щелчок на конкретной константе выдаст информацию о ней. Например, для поиска констант, начинающихся на xl (подобно xlWorkSheets) нужно выбрать Excel в списке <все библиотеки> и выделить Constants в окне "Классы". ^.О^^ОБМЕН ИНФОРМАЦИЕЙ МЕЖДУ VBA И РАБОЧИМИ ЛИСТАМИ С одной стороны, у вас имеются рабочие листы. В листе вы работаете с диапазонами, ячейками, столбцами, строками, формулами и данными. С другой стороны, вы имеете VBA-модули, в которых пишете программы, выполняете вычисления, храните макросы и манипулируете данными. Возможно ли передавать информацию из листа одного типа в лист другого типа? VBA настолько мощная и гибкая система, что вы можете делать с ячейками и диапазонами почти все. При помощи VBA можно выделять, изменять, форматировать, копировать ячейки и диапазоны и выполнять в них вычисления. Как сообщить VBA, с какими ячейками вы хотите работать Объекты - это то, с чем VBA манипулирует в Excel. Поэтому очевидно, что должны существовать объекты-ячейки. В действительности таких объектов нет. Ячейки относятся к объектам-диапазонам (Range-объектам), так же как и собственно диапазоны, столбцы и строки. Для того чтобы что-то сделать с /tonge-объектом, вам необходимо сначала определить, с чем конкретно вы хотите работать. Нужна ли вам отдельная ячейка или все ячейки рабочего листа? Может быть, вам нужен диапазон с определенным именем. Существуют много способов для определения диапазона. Определение диапазона влечет за собой использование свойства или метода, который возвращает Лая^е-объект. Вот список средств для определения диапазона: ■ Метод Cells позволяет выбрать одну или все ячейки рабочего листа; ■ Метод Range возвращает отдельную ячейку, прямоугольную область или несмежную группу ячеек (диапазон); ■ AktiveCell - это свойство, которое возвращает единственную активную ячейку в рабочей книге; ■ Selection - возвращает выделенный объект. Если выделен диапазон, то возвращается Лаи^е-объект; ■ Методы Column и Row возвращают весь столбец или строку, или же столбец или строку меньшего диапазона. Можно выбирать из этих средств, что вам нужно, для определения различных диапазонов. В чем отличие объекта Range от метода Range"? Метод Range - это один из способов, с помощью которого можно задать Range-объект. Метод Range возвращает Range-объект. То же самое делает метод Cells. Но в VBA нет объекта Cells. (Помните, что VBA представляет все ячейки как небольшие диапазоны). 1. Ссылка на одиночную ячейку Методы Cells и Range могут возвращать ссылку на отдельную ячейку. Различие между этими методами в способах, которые они используют. Но после того, как ячейка возвращена одним из этих методов, VBA не "знает", каким методом это было сделано. Теперь это - просто ./torcge-объект. Один из способов ссылки на отдельную ячейку - это с помощью метода Range. Справка о Range. Синтаксис метода Range, который возвращает отдельную ячейку: object.Range ("cell") Здесь object - это необязательная ссылка на рабочий лист, где может быть найдена ячейка, cell - либо имя, либо координаты определенной ячейки. Например, строка Worksheets ("Лист1"). Range ("A14") возвращает ячейку А14 в листе Лист! активной рабочей книги. Если лист не указан, Range ссылается на ячейку в текущем листе. Если текущий лист не является рабочим, метод будет завершен неверно. Один из больших недостатков Range в том, что вам необходимо давать ссылку на определенную ячейку. А чтобы использовать переменные для указания ячейки, нужно использовать метод Cells. Существуют две особенности при ссылке с помощью Cells. Первая из них состоит в том, что вместо использования символа для указания столбца, используется число или численное выражение. Это - большое преимущество, потому что позволяет использовать переменные и другие выражения, которые оцениваются как числа. Вторая особенность заключается в том, что строка следует первой. Например, при указании ячейки В7 символ В ссылается на столбец, а число 7 - на строку, так что в Excel вы привыкли к обратному: сначала идет столбец. Ссылка на ту же ячейку с использованием метода Cells выглядит так: Cells (7,2). VBA считает, что это - ячейка в седьмой строке второго столбца. Вы можете использовать при ссылке на ячейку буквы в части столбцов, и заменить 2 на "В" (включая кавычки). Но тогда вы не смогли бы создать подобный код: Sub MultipIicationTable () For rws = 1 To 10 For cols = 1 To 10 Cells (rws, cols). Value = rws * cols Next cols Next rws End Sub Эта процедура заполняет блок ячеек 10x10 таблицей умножения. Используя вложенный цикл, она по очереди проходит каждую ячейку в блоке. Для того, чтобы понять, как это работает, давайте сначала посмотрим на среднюю строку: 18 Cells (rws, cols). Value = rws * cols Эта строка берет две переменные (rws, cols) и использует их для определения ячейки. Если rws в настоящий момент равна 2 и cols равна 3, то Cells (rws, cols) выбирает ячейку в строке 2 и столбце 3, что является ячейкой ВЗ. Значение этой ячейки становится равным: rws * cols или в данном случае - 6. Таким образом, всякий раз при выполнении средней строки в соответствующую ячейку помещается произведение двух переменных. Справка о Cells. Синтаксис метода Cells следующий: object.Ce.Ws (Rowlndex, Columnlndex) Здесь object - это необязательная ссылка на рабочий лист, где может быть найдена ячейка, a Rowlndex и Columnlndex - это числовые выражения для строки и столбца нужной ячейки. Как же работают вложенные циклы For/Next? Первый из них задает переменной rws начальное значение 1. Второй задает переменной cols тоже значение 1. Далее идет средняя строка, описанная выше. Когда VBA подходит к строке "Next cols", снова осуществляется переход на строку "For cols" и значение cols увеличивается до 2. Средняя строка теперь выполняется при значении cols равном 2, а rws равном 1. Внутренний цикл продолжает выполняться, пока значение переменной cols не достигнет 10. Так заполняется вся первая строка листа. После того, как внутренний цикл выполнился 10 раз, он заканчивается. Это означает, что VBA переходит к следующей строке: Next rws. При этом увеличивается значение rws до 2 и возвращается к началу цикла для rws. Затем снова выполняется цикл для cols, всего 10 раз, заполняя вторую строку листа во всех 10 столбцах и т.д. 2. Ссылка на несколько ячеек Методы Cells и Range могут возвращать ссылку на несколько ячеек. Однако они в этом отношении существенно отличаются. Метод Cells является чем-то вроде предложения "все или ничего"; без аргумента он возвращает все ячейки в рабочем листе. Это может быть полезным, если вам нужно сделать что-либо с каждой ячейкой, например, изменить шрифт. Следующий оператор устанавливает свойство полужирного шрифта на True для всех ячеек листа JIucml: Worksheets ("ЛистГ). Cells. Font. Bold - True Метод Range является более многосторонним. Вы можете использовать его для выделения прямоугольного блока, нескольких отдельных или комбинации из двух ячеек. Прямоугольные блоки ячеек задаются с использованием ячейки начала и ячейки конца, отделяемых друг от друга ":". Например, Range ("B4:E6").Select Другой способ использования метода Range - это задавать различные ячейки, отделяемые запятыми. Строка Range ("al, Ь2, cl, d2").Select выделяет указанные четыре ячейки. Заметьте, что в кавычки заключен весь список. А не каждый элемент в отдельности. Эти два приема можно объединить и использовать метод Range для выделения любой комбинации прямоугольных диапазонов и отдельных ячеек. Следующий код выделяет два различных диапазона: Range("A2:C4, D8:F10").Select Диапазон ячеек можно выделить и следующим образом Range(Cells(2,2), Cells(34,20)). Select В данном случае будет выделена прямоугольная область, верхним левым краем которой является ячейка, расположенная во 2 строке и во втором столбце (Cells(2,2)), а нижним правым - ячейка расположенная в 34 строке и 20 столбце (Cells(34,20)). 3. Строки и столбцы Метод Rows дает возможность выбрать целую строку в рабочем листе или строку в определенном диапазоне. Если вы не укажете объект, то метод будет работать с активным листом. Если это не будет рабочим листом, то метод будет завершен неверно. Данный оператор выделяет всю четвертую строку рабочего листа: Rows (4).Select Если указывается диапазон, то метод работает иначе. При отсчете строк первой является строка вверху диапазона. Например: Range ("B3:G7"). Rows (2). Select выделит вторую строку диапазона B3:G7. Это оказывается диапазоном B4:G4. Метод Columns работает во многом подобно методу Rows. Вы можете использовать букву в качестве аргумента этого метода, если заключите ее в кавычки. Поэтому, для того, чтобы выбрать третий столбец рабочего листа, вы могли бы использовать Columns(3) или Columns("C"). Справка о Rows. Синтаксис метода Rows: object.Rows (index) Где объект является необязательным и может быть рабочим листом или диапазоном, a index - это номер строки, которая должна быть возвращена.
«Язык программирования Visual Basic for Application. Структура программы на языке. Операторы присваивания, ввода и вывода» 👇
Готовые курсовые работы и рефераты
Купить от 250 ₽
Решение задач от ИИ за 2 минуты
Решить задачу
Помощь с рефератом от нейросети
Написать ИИ

Тебе могут подойти лекции

Смотреть все 588 лекций
Все самое важное и интересное в Telegram

Все сервисы Справочника в твоем телефоне! Просто напиши Боту, что ты ищешь и он быстро найдет нужную статью, лекцию или пособие для тебя!

Перейти в Telegram Bot