Как мне открыть Word (или Excel, или Блокнот (Notepad) или танцевальную видеоигру Dance Dance Revolution)?
В язык Visual Basic включена функция shell, которая позволяет запускать другую программу. Для применения функции Shell необходимо задать полный путь, указывающий на файл программы. Вот приведен пример запуска Windows-программы Калькулятор:
Shell "C:\Windows\calc.exe"
Когда вы применяете функцию shell, ОС Windows запускает запрошенную программу, а ваш код продолжает выполняться. Но у вашего программного кода нет реальной возможности взаимодействовать с программой. Вы не можете заставить ее сделать что-либо или выяснить, что она закрыта.
Shell кажется удобной функцией, но у нее есть существенная проблема. Для того чтобы использовать функцию Shell, нужно знать точное местонахождение программы. Вы не можете просто сказать: "Запусти Microsoft Word" или "Открой этот документ". Вместо этого вы должны глубоко зарыться в файловую систему жесткого диска, чтобы найти файл нужной программы (который обычно находится где-то в зоне вашего компьютера с именем Program Files). Хуже того, после того как вы заставили функцию Shell работать на вашем компьютере, нет никакой гарантии, что она заработает на какой-либо другой машине — в конце концов, та же программа может быть установлена где-то совсем в другом месте.
И как с этим бороться? Можно воспользоваться гиперссылкой, которая запускает нужную программу автоматически, если по ссылке щелкнуть кнопкой мыши. Но некоторые программы, включая других членов семейства Microsoft Office, предлагают лучший вариант. Они предоставляют собственные объекты, которыми можно манипулировать в коде на языке Visual Basic. Благодаря этим объектам можно применять эти программы, не беспокоясь об их местонахождении. Вы конечно же можете делать с ними гораздо больше, задавая различные свойства и вызывая разнообразные методы.
Можно заставить программу Word открыть документ, добавить в него некоторый текст, отправить 10 копий на принтер и затем завершить программу.
Объекты, реализующие этот процесс, не рассматриваются в данной книге, но далее приведен очень простой пример, который запускает программу Word, выводит на экран окно программы и загружает в нее документ GothicWedding.doc:
Dim Word As Object
Set Word = CreateObject("Word.Application")
Word.Visible = True
Word.Documents.Open CurrentProject.Path & "\GothicWedding.doc"
Если эта технология заинтересовала вас, обратитесь к справочной системе программы Word, из нее можно узнать гораздо больше об объектной модели Word. Другой полезный ресурс — Microsoft's Office Developer Center (Центр разработчиков Microsoft Office) на Web-сайте http://msdn.microsoft.com/office.
Объект DoCmd
Объект DoCmd — единственный наиболее полезный объект в мире программирования Access. Он обеспечивает "покупку всего нужного в одном месте" для самых разнообразных задач, таких как открытие форм и отчетов, запуск других программ, поиск записей и выполнение макросов.
В отличие от виденных вами ранее объектов, у объекта DoCmd нет никаких свойств. Вместо этого он состоит из методов, выполняющих разные действия. Если нужно открыть форму с именем ProductCatalog, можно использовать метод OpenForm следующим образом:
DoCmd.OpenForm "ProductCatalog"
Как большинство методов объекта DoCmd, OpenForm может использовать несколько необязательных параметров. Visual Basic подскажет, отобразив список возможных параметров в процессе ввода имени метода. Далее показан пример, в котором пропущены второй и третий параметры (обратите внимание на запятые без значений между ними), но задается фильтр в четвертом параметре и режим данных в пятом:
DoCmd.OpenForm "ProductCatalog",,,"ID=5", acFormReadOnly
Эта команда открывает форму ProductCatalog, применяет фильтр для вывода на экран одной записи с ID (Код), равным 5, и использует режим "только чтение" для запрета каких-либо изменений.
Примечание
В данном примере используется константа acFormReadOnly. Константы — это числовые значения, которым присвоены более информативные имена. Таким образом вместо запоминания числа, обозначающего режим "только чтение", можно применять более осмысленную константу acFormReadOnly. Всегда, когда встречается переменная, начинающаяся с ас или vb, и вы ее не создавали сами, знайте, что это константа. Конечно, для того чтобы пользоваться константами, нужно все-таки знать их имена, но в этом может помочь средство IntelliSense, как показано на рис. 17.8.
Рис. 17.8. Когда вы добираетесь до параметра режима данных, редактор Visual Basic выводит на экран список всех допустимых констант, которые можно использовать. Для того чтобы выяснить, что они означают (если это не очевидно), следует обратиться к справочной системе Access
Метод OpenForm может показаться знакомым, потому что вы уже видели такие же функции в макрокоманде ОткрытьФорму (OpenForm) (см. главу 15). В действительности все методы объекта DoCmd соотносятся с макрокомандами, которые вы изучали в главе15. В табл. 17.1 перечислены наиболее полезные методы.
Таблица 17.1. Полезные методы объекта DoCmd
Метод | Описание |
ApplyFilter | Применяет фильтр к таблице, форме, запросу или отчету для того, чтобы сконцентрировать внимание на интересующих вас записях |
Веер | Производит некоторый сигнал. Обычно используется для привлечения внимания к возникшей проблеме |
Close | Закрывает текущий объект БД (или конкретный объект, который задан) |
CopyDatabaseFile | Предоставляет быстрый способ создания резервной копии БД |
FindRecord, FindNext и GoToRecord | Предоставляет разные способы поиска нужной записи |
Hourglass | Включает отображение указателя мыши в виде песочных часов (или выключает). Применяется для того, чтобы дать знать пользователю о том, что выполняется требующая времени задача и следует остыть |
Таблица 17.1 (окончание)
Метод | Описание |
OpenForm, OpenQuery, OpenReport и ОреnТаblе | Открывает соответствующий объект БД в нужном вам режиме представления с параметрами фильтрации и необязательными уточнениями. Как вы узнали в главе 15, можно применять макрокоманду ОткрытьОтчет (OpenReport) для печати отчетам команду От-крытьЗапрос (OpenQuery) для выполнения запроса на изменение |
Printout | Предлагает один вариант печати данных из текущего объекта БД |
Quit | Завершает работу программы Access |
RunCommand | Замещающая команда, которая позволяет выполнить различные команды Access, представленные на ленте. Необходимо только задать правильную константу. В разд. "Управление выполнением заказов" далее в этой главе приведен пример, в котором программист применяет метод RunCommand для немедленного сохранения текущей записи |
RunMacro | Выполняет макрос |
RunSQL | Выполняет групповой SQL-оператор. Эту команду нельзя использовать для извлечения данных из вашей БД. Она позволяет выполнять команды, которые изменяют записи или таблицы |
ShowAllRecords | Удаляет параметры текущего фильтра, поэтому можно увидеть все записи в таблице, форме, запросе или отчете |