Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

regeda_v_v_regeda_o_n_osnovy_programmirovaniya_na_vba

.pdf
Скачиваний:
11
Добавлен:
06.02.2016
Размер:
1.26 Mб
Скачать

скобках после имени массива номера (индекса) элемента. Массив перед использованием необходимо объявить с помощью оператора DIM. После объявления все элементы числового массива принимают значение, равное 0, а символьного массива значение пустой строки (“ ”). При объявлении массива указывается номер (индекс) его последнего элемента или диапазон значений индекса. Это число может быть заранее неизвестно. Тогда оно задается в виде переменной или выражения целого типа. Важно только чтобы к моменту выполнения оператора объявления массива, значение этой переменной или выражения было известно. Если указывается номер последнего элемента, то номер первого или принимается по умолчанию равным 0, или устанавливается предшествующим объявлению оператором OPTION BASE. Например, если бы оператору DIM a(42) предшествовал оператор OPTION BASE 1, то объявленный массив содержал бы элементы от a(1) до a(42). У массива, заданного в виде диапазона

DIM a(22:44), имеются элементы от a(22) до a(44).

Массивы могут быть двумерными, т.е. представлять матрицу. В этом случае в операторе объявления определяется количество элементов по каждой размерности. Например, DIM a(5,6) определяет матрицу, содержащую пять строк и шесть столбцов.

Для работы с массивами удобно использовать циклические программы. Например, программа, присваивающая элементам двумерной матрицы A(2,3) (три строки и четыре столбца) значения из оператора DATA, имеет вид:

DATA 1,2,3,4,5,6,7,8,9,10,11,12 DIM a(2,3)

FOR i=0 TO 2 FOR j=0 TO 3

READ A(i,j) NEXT j, i

Для вывода на экран полученной матрицы A(i,j) (в виде матрицы), необходимо использовать два оператора NEXT, так как между ними должен помещаться пустой оператор PRINT, переводящий курсор в начало текущей строки.

FOR i=0 TO 2

FOR j=0 TO 3 PRINT A(i,j),

NEXT j PRINT

NEXT i

REM Результат выполнения программы:

REM

1

2

3

REM

4

5

6

REM

7

8

9

REM

10

11

12

2.10. Организация работы с дисковой памятью в TURBO BASIC

Для организации работы с дисковой памятью используется понятие файла. Файл это набор данных на диске, который можно создать, к которому можно осуществить доступ для чтения или для записи данных, и который, наконец, можно уничтожить. Всякий файл должен иметь имя, которое состоит из двух частей, разделенных точкой: имя файла.расширение. Имя файла это последовательность символов, которая содержит до 8 произвольных символов (букв, цифр,

знаков (, ), {, }, @, #, $, %, ^, &, !, -, _, /, ~).

Расширение содержит до 3 произвольных символов. В имени и в расширении файла не могут использоваться пробелы. Для однозначной идентификации файлов необходимо полностью указать спецификацию файла имя диска, путь и имя файла. Если файл находится на диске и в каталоге по умолчанию, то достаточно указать лишь его имя.

В TB различают последовательные, прямые и двоичные файлы. Пря-

мые файлы представляют собой последовательность записей, к которым можно обращаться в произвольном порядке. Двоичные файлы это просто последовательность байтов, в которых хранится информация. В данной работе рассматриваются лишь последовательные файлы, которые представляют собой последовательность записей (строк символов), разделенных между собой символами “возврата каретки” или “перевода строки” (RC / LF). Каждая запись формируется операцией вывода в файл. Преимущество последовательных файлов это возможность работы с ними с помощью обычных текстовых редакторов. Основным ограничением при работе с ними является только лишь последовательный доступ к данным. При открытии файла можно прочитать первую запись, затем вторую и т.д. При этом, после чтения первой записи повторить эту операцию уже нельзя, не закрыв и не открыв заново файл, а для того чтобы прочитать, скажем 10000-ю запись, необходимо прочитать все предыдущие. Таким образом, последовательные файлы удобны при обработке из программы, только если обрабатываются все или почти все записи файла.

Общая схема работы с файлом следующая:

файл открывается (оператором OPEN) с указанием режима работы

сним (INPUT для ввода, APPEND для вывода путем добавления, OUTPUT для вывода в начало с уничтожением содержимого файла, если онужесуществовал);

осуществляется последовательный доступ к файлу: если этот файл для чтения, то используется оператор INPUT # , если же этот файл для

вывода, то оператор PRINT # или PRINT USING #; файл закрывается с помощью оператора CLOSE.

Файл может быть несколько раз открыт для чтения, что позволяет обращаться к различным местам файла.

Оператор OPEN для открытия последовательных файлов имеет следующий формат:

OPEN “спецификация файла” FOR режим AS #номер файла

режим это одно из ключевых слов INPUT, OUTPUT или APPEND; номер файла произвольное число, рассматриваемое как номер файла.

Оператор CLOSE для закрытия последовательных файлов имеет следующий формат:

CLOSE [ [ #]номер файла [, [#]номер файла]]

номер файла номер файла, объявленный в операторе OPEN.

Оператор закрывает файл, разрывая связь между файлом на диске и его номером. Если аргумент в операторе CLOSE отсутствует, то закрываются все открытые файлы.

Оператор INPUT # для чтения записи из последовательного файла имеет следующий формат:

INPUT # номер файла, список переменных

номер файла произвольное число, рассматриваемое как номер файла; список переменных последовательность разделенных запятыми числовых или символьных переменных. Данные в читаемой записи должны соответствовать типам переменных.

Оператор PRINT # для вывода записи в последовательный файла имеет следующий формат:

PRINT # номер файла, [USING v$;] список выражений[;]

номер файла произвольное число, рассматриваемое как номер файла; список выражений последовательность разделенных запятыми

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

Оператор PRINT # выводит запись в последовательный файл подобно тому, как это делает оператор PRINT при выводе на экран. Конструкция USING позволяет управлять форматом выводимых значений.

2.11. Примеры программ обработки массивов

2.11.1. Набрать программу для формирования и вывода на экран матрицы размерности 9 на 9, значения элементов которой взяты из файла DANNIE.DAT, находящегося на диске D в каталоге TBAS, начиная с 10 записи.

OPTION BASE 1 : DIM a(9,9)

OPEN “D:\TBAS\DANNIE.DAT” FOR INPUT AS #1 FOR j=0 TO 9

INPUT #1, i NEXT j

FOR i=0 TO 9

FOR j=0 TO 9

INPUT #1, A(i, j )

PRINT USING “####.#”;A(i, j); NEXT j

PRINT

NEXT i

2.11.2. Добавить в первую программу строки, реализующие алгоритм преобразования матрицы A(i, j) в матрицу B(i, j), путем замены строк и столбцов местами. Вывести в файл с именем REZULT.DAT в текущем каталоге значения элементов преобразованной матрицы.

DIM B(9,9) : OPEN “REZULT.DAT” FOR OUTPUT AS #2 FOR i=1 TO 9

FOR j=1 TO 9

B(i, j)=A(j, i)

PRINT #2, USING “####.#”; B(i, j); NEXT j

PRINT #2

NEXT i

CLOSE #1, #2

2.11.3. Дописать в программу строки для определения и вывода на экран монитора суммы элементов матрицы A(i, j) по строкам:

FOR i=1 TO 9 s=0

FOR j=1 TO 9 S=S+A(i, j)

NEXT j

PRINT “S=“;

PRINT USING “####.#”; S

NEXT i

2.11.4.Самостоятельно добавить в программу строки для вычисления и вывода на экран произведения элементов матрицы B(i,j) по столбцам.

2.11.5.Дописать в программу строки для перестановки строк матрицы B(i,j) по убыванию значений первых элементов её строк. Вывести на экран полученную матрицу:

FOR i=1 TO 9 MAX=B(i,1)

‘Нахождение наибольшего первого элемента в строках ‘матрицы и номера этой строки imax

FOR k=i TO 9

IF B(k,1)>=MAX THEN MAX=B(k,1) imax=k

NEXT k FOR j=1 TO 9

‘Вывод на экран текущей строки imax PRINT USING “####.#”;B(imax,j);

‘Исключение этой строки из дальнейшего анализа

SWAP B(imax,j),B(i,j) NEXT j

PRINT

NEXT i

2.11.6. Добавить в программу строки для перестановки столбцов матрицы A(i,j) по возрастанию значений первых элементов её столбцов.

2.11.7. Дописать в программу строки для вычисления и вывода на экран монитора суммы элементов двух главных диагоналей матрицы

B(i,j).

2.11.8. Добавить в программу строки для вычисления и вывода на экран монитора среднего квадратического значения элементов матрицы B(i,j) по строкам.

3. ОБЪЕКТНО–ОРИЕНТИРОВАННЫЙ МЕТОД ПРОГРАММИРОВАНИЯ

Visual Basic for Application (VBA) – это объектно-ориентированный язык программирования высокого уровня, являющийся одним из диалектов очень популярного языка программирования Visual Basic. Его достоинством является возможность совместного использования с другими при-

ложениями (Microsoft Word, Excel, Access, Project) и языками программи-

рования, что позволяет создавать полностью автоматизированные системы за время меньшее, чем при помощи традиционных языков программирования. При этом VBA сохранил традиционную для Basic простоту в использовании.

1.1. Объект

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

При внедрении объекта в приложение он сам заботится о себе; ему нужно указать только место отображения на экране. Помещая, например, на рабочий лист Excel кнопку Visual Basic, нет необходимости сообщать рабочему листу, как эта кнопка должна работать. При нажатии на кнопку ее встроенный программный код сама позаботится обо всем.

Таким образом, объект объединяет в одно целое (инкапсулирует) свойства объектов и возможные над ним операции (методы).

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

Объекты VBA – это кнопки, элементы меню, документы, фрагменты документа, символы, интервалы ячеек рабочего листа и даже сам рабочий лист. Почти все то, что можно увидеть на экране работающего приложения, является объектом. В таблице 3.1. приведены примеры классов объек-

тов в приложениях Microsoft Office Word и Excel.

 

 

 

Таблица 3.1

Прило-

Класс

Свойства

Методы

жение

объектов

 

 

Word

Documents

Name (имя)

Open (открытие)

 

(документ)

FileName (местополо-

Close (закрыть)

 

 

 

 

жение)

Save (сохранение)

 

 

Add (создает новый объ-

и др.

 

 

ект в семействе)

 

 

 

и др.

 

 

 

 

 

Excel

Workbooks

ActiveSheet (актив-

Open (открытие)

 

(книга)

ный лист книги)

Close (закрыть)

 

 

Name (имя)

Save (сохранение)

 

 

Path (полное имя пап-

и др.

 

 

ки, где находится книга)

 

 

 

Add (создает новый объ-

 

 

 

ект в семействе)

 

 

 

и др.

 

 

 

 

 

Объекты Document объединяются в класс объектов Documents(). Один из документов класса Documents с именем Проба.doc

Documents (”Проба.doc”).

Объекты в приложениях образуют некоторую иерархию, на вершине которой находится приложение (Applicacion). Иерархия объектов в приложениях Microsoft Office Word и Excel приведена в таблице 3.2.

Таблица 3.2.

Word

 

Excel

активное приложение

активное приложение

(Applicacion)

(

Applicacion

)

 

 

 

документ (Documents)

книга (Workbook)

фрагмент документа (Selection)

лист (Worksheet)

символ (Character)

диапазон ячеек (Range)

Чтобы получить доступ к объекту в языке VBA, необходимо составить ссылку на него, начав с самого общего наружного объекта, за которым должна следовать точка и следующий вложенный в него объект, и так далее до тех пор, пока не будет достигнут нужный объект. Например, чтобы в программе Word ссылка на документ ЛР1.doc выглядит следующим об-

разом: Application.Documents (”ЛР1.doc”).

Однако делать каждый раз ссылку на текущий объект необязательно, если этот объект активный. Например, если приложение Word активно, достаточно сделать относительную ссылку на сам документ:

Documents (”ЛР1.doc”).

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

В дополнение к именованным листам или рабочим книгам можно использовать такие объекты, как: ActiveWorkbook (активная рабочая книга), ActiveDocument (активный документ), ActiveWindow (активное окно) для того, чтобы иметь возможность ссылаться на активные объекты, не указывая их имен.

1.2. Методы объекта

Для того чтобы объект выполнил какую-либо операцию необходимо задать метод. Многие методы имеют аргументы, задающие параметры выполняемых действий. Синтаксис команды применения метода объекта:

Объект.Метод арг1:=значение, арг2:=значение

Например, операция открытия в приложении Word документа Проба.doc, находящегося на диске H: в папке ФИО содержит не только название метода, но и указание пути к открываемому файлу

Documents().Open FileName:=(“H:\ФИО\Проба.doc”)

Для открытия нового документа в Word используется следующий программный код

Documents.Add DocumentType:=wdNewBlankDocument

Для вывода на печать двух первых страниц документа Проба.doc необходимо задать для метода PrintOut значения аргументов Range

(задает формат диапазона печати), From и To (задают номер начальной и конечной страниц печати):

Documents(“Проба.doc").PrintOut _ Range:=wdPrintFromTo,From:=”1”, To:=”2”

Обратите внимание, что в последнем выражении строка кода не поместилась в одной экранной строке, поэтому она перенесена на следующую экранную строку с помощью символа подчеркивания (_) с предшествующим символом пробела.

Сохранение документа Проба.doc на диске реализует метод Save:

Documents(“Проба.doc").Save

1.3. Свойства объекта

Для изменения состояния объекта необходимо задать новые значения его свойств. Синтаксис команды изменения свойств:

Объект.Свойство = ЗначениеСвойства

Для установки во фрагменте текста (объект Selection) для восьмого символа (объект Characters(8)) начертание полужирный (свойство Bold), которое имеет два значения True или False (установлено или не установлено), введем следующий код:

Selection.Characters(8).Italic = True

Объект может иметь множество свойств. С помощью инструкции With можно задавать значения сразу нескольким свойствам объекта:

With Объект

.Свойство1=ЗначениеСвойства1

.Свойство2=ЗначениеСвойства2

End With

Заметьте, что строки, находящиеся между With и End With немного сдвинуты влево. И хотя для самого VBA это не важно, однако это упрощает чтение программы. Поэтому, чем больше становится программа, тем чаще необходимо включать в нее комментарии и отступы. Чтобы увеличить отступы в одной или нескольких строках кода, отметьте эти строки и нажмите клавишу Tab, а для уменьшения отступов – сочетание клавиш

Shift+Tab.

4. ИНТЕГРИРОВАННАЯ СРЕДА ПРОЕКТИРОВАНИЯ VBA (IDE VBA)

Редактор Visual Basic в интерпретации Microsoft называется Интегрированной Средой Проектирования (IDE). В IDE собраны все средства и инструменты, необходимые программисту для разработки и создания приложений (написание и редактирование программ; проектирование диалоговых окон и других элементов приложений, облегчающих взаимодействие с пользователем; запуск программ; тестирование и отладка программ; отслеживание работы всех элементов каждой конкретной программы; контроль за взаимодействием различных VBA-программ).

Самый простой способ научиться работать с Visual Basic – записать свой макрос, в результате чего автоматически генерируется программный код на языке VBA, а затем, запустив отладку программы, проанализировать все команды, входящие в состав макроса.

Для записи макроса, который, например, переформатирует выделенный фрагмент текста в среде WORD в полужирное начертание красного цвета, необходимо выбрать в меню Сервис→Макрос→Начать запись. В появившемся окне Запись макроса задать содержательное имя макроса, например Полужирный_красный, и нажать клавишу ОК. При этом откроется соответствующая панель записи макроса и изменится изображение курсора. С этого момента все выполняемые действия будут автоматически сохраняться в макросе. В данном случае необходимо щелкнуть на кнопках

Цвет шрифта (Красный) и Полужирный.

Для завершения записи макроса необходимо щелкнуть на клавише Остановить запись. Затем выбрать созданный макрос в окне Макросы

(Сервис→Макрос→ Макросы) и нажать кнопку Отладка. В результате откроется окно редактора Visual Basic (рис. 4.1), в котором уже находится листинг записанного макроса. Другой способ запустить Visual Basic – нажать комбинацию клавиш (Alt+F11) или выбрать в меню Сер-

вис→Макрос→Редактор Visual Basic.

Самое большое окно в Visual Basic – окно редактирования кода (1), которое служит в качестве редактора для ввода кода процедур приложения. Код внутри модуля организован в отдельные разделы для каждого объекта, программируемого в модуле. С помощью кнопок, расположенных слева от горизонтальной прокрутки, можно переключать два режима переключения кода: просмотр отдельной процедуры и просмотр всего модуля.

Над окном редактирования кода располагается стандартная панель инструментов (2), которую можно отобразить на экране выбором команды

View→Toolbars→Standard.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]