Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Часть 2. Основы офисного программирования.doc
Скачиваний:
8
Добавлен:
01.05.2025
Размер:
4.04 Mб
Скачать

5.15.Открытие проектов, экспорт и импорт

Любой проект связан с некоторым документом или шаблоном основного приложения. Следовательно, для просмотра проекта и работы с ним требуется открыть связанный с ним документ.

Каждое приложение имеет свой способ хранения проектов:

  • Word сохраняет проекты в документах (файлах с расширением DOC) и шаблонах документов (файлах DOT);

  • Excel сохраняет проекты в рабочих книгах (XLS);

  • Access сохраняет проекты в файлах базы данных (MDB);

  • PowerPoint сохраняет проекты в презентациях (PPT).

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

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

Если имеется компонент проекта VBA, который необходимо включить в другой проект, то сначала необходимо его экспортировать из исходного проекта, а затем импортировать в разрабатываемый проект. Кроме того, так как компоненты приложений VBA всегда хранятся в отдельных файлах, можно загрузить компонент проекта.

Каждый компонент приложения VBA хранится в основном документе, поэтому, чтобы использовать их проекте VBA в другом документе или приложении, следует сначала выполнить экспорт. Чтобы экспортировать файл нужно:

  1. Выбрать экспортируемый компонент в окне проекта.

  2. Выполнить команду Экспорт файла в контекстном меню или в меню Файл.

  3. В диалоговом окне команды раскрыть нужную папку и ввести имя файла для сохранения в нем экспортируемого компонента.

  4. Щелкнуть кнопку OK.

Для файлов VBA используются следующие расширения: FRM – форма, CLS – класс, BAS – модуль программы.

Чтобы импортировать файл в проект следует:

  1. В окне редактора VBA (в окне проекта) выполнить команду Импорт файла с помощью контекстного меню или меню Файл.

  2. Найти и открыть нужный файл.

Глава 6.Использование Win32 api

Win32 Application Programming Interface (API) – библиотека, доступная каждому программисту, создающему приложения в среде Windows. Она используется для создания приложений для любых 32-разрядных операционных систем фирмы Microsoft.

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

В Microsoft Office шаблоны являются каркасами приложений, примером практической реализации принципа многократного использования программных компонентов.

Операционные системы Windows разрабатывались на основе модели WOSA (Windows Open Services Architecture – открытая архитектура служб Windows). В соответствии с этой концепцией API служит своего рода черным ящиком: все функции, используемые в Windows, вынесены «на всеобщее обозрение» (известны их имена, назначение, списки параметров, возвращаемые значения), но без описания деталей их реализации.

Все сервисы WOSA делятся на три группы:

  • Базовые сервисы: Win32 API (позволяет использовать в приложениях практически любые функции Windows 95 или Windows NT); ODBC API (возможность связываться с любыми источниками данных независимо от разработчика); MAPI (Messaging API – реализация доступа к почтовым системам, использующим MAPI); TAPI (Telephony API – доступ к коммутируемым (телефонным) линиям); OLE API (поддержка связывания и внедрения объектов);

  • Коммуникационные сервисы: Sockets API (доступ к сети с помощью различных сетевых протоколов); SNA API (открытый доступ к большим ЭВМ – мэйнфреймам фирмы IBM); RPC API (удаленный вызов процедур, позволяющий упростить разработку клиент/серверных распределенных систем);

  • Сервисы вертикальных приложений (бизнес-сервисы) – расширения WOSA для систем электронной коммерции, обработки биржевой информации в реальном времени, для систем управления, разработки и производства.

Можно сказать, что Win32 API состоит из двух компонентов: библиотек динамической компоновки (DLL) и описаний к ним. Создание нового API сводится фактически к разработке новой библиотеки.

Использование функций Win32 API расширяет возможности VBA. Для подключения функций Win32 API их необходимо описать с помощью специальной инструкции Declare. Эта инструкция (описатель) сообщает программе, где находится требуемая функция API и как ее использовать. В описателе указывается следующая информация: имя функции, содержащая функцию DLL, передаваемые в функцию параметры, тип возвращаемых данных. Правило записи инструкции приведено ниже:

Declare Function | Sub Псевдоним Lib “ИмяБиблиотеки” _ [Alias “ИмяФункцииAPI](СписокПараметров) _ [As ТипРезультата]

Основные библиотеки Windows 95 имеют следующее назначение: KERNEL32 – функции ядра ОС (низкоуровневые функции управления ресурсами и процессами), GDI32 – функции управления графическим интерфейсом, USER32 – функции для работы с окнами.

Если функция API возвращает данные строкового типа, необходимо указать буфер, представляющий собой переменную для хранения возвращаемой строки и число, определяющее длину буфера. Строки, возвращаемые функциями API, заканчиваются символом с кодом 0 (это ASCIIZ-код), поэтому размер буфера должен быть на 1 больше предполагаемой длины строки.

При передаче в функцию API строковой переменной она воспринимается как указатель. Для передачи в функцию пустого указателя в VBA используется значение 0& (нуль типа Long). При передаче в функцию пустого указателя необходимо внести в описатель функции изменения: тип аргумента можно указать как As Any, при этом в функцию можно передать как строковые переменные, так и переменные типа Long, если нужно.

Для облегчения работы с объектами в Windows используются их числовые идентификаторы. Существует вида типа таких идентификаторов: дескрипторы и указатели. Дескриптор – это специальное 32-битное целое число, которое используется Windows для идентификации объекта, например, окна или потока. Большинство функций Win32 API работает с дескрипторами. Указатель – это адрес объекта, переменной или структуры. VBA их не использует, но многие функции API требуют передачи указателей в качестве аргументов. При вызове данных функций из программы VBA необходимо использовать переменную того же типа, что и переменная, на которую ссылается указатель, и использовать ключевое слово ByRef в описании функции.

Текстовые строки всегда передаются в функции из библиотек DLL по ссылке. Ключевое слово ByVal для строковых аргументов задает преобразование строки в формат с окончанием на нулевой символ. Использование ключевого слова ByRef для строковых аргументов недопустимо.

Ниже приведен пример использования функции GetSystemDirectory для получения полного имени системной папки Windows. В модуле, содержащем вызов функции, должен содержаться описатель:

Declare Function GetSystemDirectory Lib “KERNEL32” ­_

Alias “GetSystemDirectoryA” _

(ByVal lpBuffer As String , _

ByVal nSize As Long) As Long

Далее приведен пример процедуры, обращающейся к данной функции:

Sub Ex_GetSystemDirectory ()

Dim strBuffer As String

Dim intLen As Integer

‘ Выделение памяти для буфера (возвращаемой строки):

strBuffer = String(256, 0)

Получение полного имени системной папки:

intLen = GetSystemDirectory (strBuffer, _

Len(strBuffer))

Отсекается пустой «хвост» строки:

strBuffer = Left(strBuffer, intLen)

MsgBox Prompt := strBuffer, _

Buttons := vbInformation, _

Title := Системная папка

End Sub

Свойство LastDLLError возвращает системный код ошибки, возникшей при вызове библиотеки динамической компоновки (DLL). Это свойство доступно только для чтения, применимо только при вызовах в программах Visual Basic библиотек динамической компоновки (DLL). После вызова библиотеки вызываемая функция обычно возвращает код, свидетельствующий об успешном или неудачном выполнении, и заполняет значение свойства LastDLLError. Для того чтобы получить список возвращаемых значений и их описание, следует обратиться к документации по функциям DLL. В любом случае возвращения кода неудачного вызова в приложение, использующее Visual Basic, необходимо немедленно проверить значение свойства LastDLLError.

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

  • При использовании функций API с именами, в которых присутствуют символы, недопустимые для использования в названиях функций VBA.

  • При использовании пользовательских нестандартных описателей.

  • При использовании функций работы со строками, чтобы подчеркнуть, когда используется набор символов ANSI (тогда к имени функции добавляется суффикс ‘A’), а когда – Unicode (добавляется суффикс ‘W’).

Некоторые функции Win32 API используют стандартные константы. Использование имен этих констант, а не конкретных значений, гарантирует правильность работы программы при изменениях в Win32 API. Приложение API Viewer, входящее в комплект поставки Microsoft Office, позволяет скопировать в модуль VBA описания подобных констант.

В именах параметров функций Win32 API используются стандартные префиксы, принятые в С/С++:

  • lp – указатель на переменную, обычно на строку (в VBA используется строковая переменная);

  • n – число (в VBA используется переменная типа Integer);

  • dw – двойное слово без знака (в VBA используется тип Long);

  • w – слово без знака (в VBA используется тип Integer);

  • h – дескриптор (в VBA используется тип Long);

  • u – целое без знака (в VBA используется переменная типа Integer).

При установлении соответствия между типами, используемыми в С/С++ и типами, поддерживаемыми в VBA, могут производиться преобразования.

Более подробную информацию о средствах работы с DLL для конкретных приложений можно посмотреть в справочной системе.