Стив Каммингс - VBA для чайников
Принципы работы с файлами в VBA
Как уже говорилось в главе 11, VBA позволяет работать с файлами как с объектами и манипулировать файловыми объектами с помощью их свойств и методов.
Но это не стало органической частью VBA, а обеспечивается некоторой внешней объектной библиотекой. Как объясняется в следующем разделе, перед работой с файлами как с объектами необходимо добавить в программу ссылку на эту библиотеку.
VBA имеет также встроенную схему обработки файлов, в рамках которой файлы не трактуются как объекты. В этом случае для выполнения файловых операций используются операторы и функции, а не свойства и методы. Эта схема в VBA до сих пор работоспособна, но для большинства задач предпочтительнее иметь дело с файловыми объектами. Список соответствующих операторов и функций приведен в табл. 11.9, а информация об их использовании изложена в главе 18.
Ссылки на библиотеку Microsoft Scripting Runtime
Основные средства, необходимые для работы с файлами как с объектами, обеспечиваются объектной библиотекой Microsoft Scripting Runtime. Прежде чем создавать относящийся к файлам программный код, в VBA-проект нужно добавить ссылку на эту библиотеку. А перед тем, как сделать это, нужно убедиться в том, что соответствующая библиотека установлена на компьютере.
Библиотека Microsoft Scripting Runtime содержится в файле с именем SCRRUN.DLL, размещенном в папке WindowsSystem. Библиотека устанавливается автоматически при инсталляции Windows 98 или Windows NT с дополнением Option Pack, а также если в систему устанавливается VBA 6. Если вы работаете с VBA 5 в Windows 95 или если по каким-то другим причинам библиотеки Microsoft Scripting Runtime в вашей системе не оказалось, загрузите ее на свой компьютер с Web-страницы Microsoft для разработчиков (msdn.microsoft.com/scripting/).
Убедившись, что в вашей системе есть библиотека Microsoft Scripting Runtime, добавьте ссылку на нее в каждый из проектов, где предполагается ее использовать. Для этого выполните следующее.
1. Выберите проект в окне проводника проектов.
2. Выберите Tools1= References, чтобы открыть диалоговое окно References (Ссылки).
3. В списке диалогового окна найдите пункт Microsoft Scripting Runtime и установите флажок, соответствующий этому пункту.
4. Закройте диалоговое окно.
Трам-та-ра-рам-тарам! Все готово.
Эти действия нужно повторить для каждого проекта, работающего в библиотеке Microsoft
Scripting Runtime, независимо от используемой версии VBA (о внешних объектных библиотеках см. выше, в разделе "Доступ к объектам других приложений").
VBA-программы, использующие библиотеку Microsoft Scripting Runtime, можно поставлять отдельно только тем пользователям, у которых в системе установлен соответствующий файл . DLL. В противном случае вместе с программой нужно поставлять и файл . DLL (с инструкциями по его установке).
Доступ к файлам
Итак, библиотека Microsoft Scripting Runtime установлена, соответствующая ссылка в VBA проект добавлена. Теперь вы готовы приступить к созданию объектно-ориентированного программного кода, обеспечивающего возможность манипуляций с любыми файлами на диске. При работе с файлом как с объектом выполняются следующие действия.
1. Создание FileSystemObject - объекта высшего уровня, обеспечивающего доступ к файлам на диске.
2. Вызов подходящего метода объекта FileSystemObject для открытия нужного файла или для создания нового файла для использования.
3. Работа с файловым объектом с помощью его методов и свойств.
Практическая реализация этих действий иллюстрируется следующим фрагментом программного кода. В нем сначала создается объект File для файла lacewings.txt, а затем этот файл копируется в другое место на диске:
Dim objFileSystem As FileSystemObject
Dim objTextStreaml As File
Set objFileSystem = _
CreateObject("Scripting.FileSystemObject")
Set objFilel = _
objFileSystem.GetFile("C:bugslacewings.txt")
objFilel.Copy ("C:Мои документыbuggy.txt")
Работа со свойствами файлов
Имея для работы объект File, несложно получить доступ к содержащейся в файле информации с помощью свойств объекта. Например, с помощью свойства Size можно выяснить размер файла
Dim l ngFileSize As Long
ingFileSize = objFilel.Size
или с помощью свойства DateLastModified узнать, когда файл изменялся последний раз:
Dim dateFileDate As Date
dateFileDate = objFilel.DateLastModified
Копирование, изменение и удаление файлов
С помощью подходящих методов объект File можно скопировать, переместить или удалить:
objFilel.Сору "с:героические усилия"
objFilel.Move "с:минимальные результаты"
objFile l.Delete
Заметьте, что если вы не меняете имя файла, в операторах, использующих методы Сору и Move, нет необходимости указывать имя, а нужно указать только путь назначения. (Не забудьте в конце имени пути добавить обратную косую черту.) И кстати, объект File сохраняет ассоциацию с перемещенным файлом.
Чтобы копировать, перемещать или удалять группы файлов, используйте методы CopyFile, MoveFile и Delete File объекта FileSystemObject, а не индивидуальный объект File. В спецификациях имен файлов для методов объекта FileSys t emObject можно использовать символы подстановки. Объект File SystemObject имеет еще методы CopyFolder, MoveFolder и DeleteFolder, которые применимы к папкам вместе с вложенными в них структурами.
Чтение и запись данных
Кроме копирования, перемещения и удаления файлов, вас, возможно, заинтересуют и данные, хранящиеся внутри файлов. В этом разделе обсуждается объектно-ориентированный подход к организации чтения и записи информации.
Объекты, относящиеся к файлам, можно использовать для организации доступа к содержимому файла только как к непрерывному блоку текста. Конечно, этот текст может содержать и числовые данные, ведь ничто не заставляет вас хранить и читать только имена, прозу и поэзию. Но доступ к файлу может быть только последовательным - нельзя произвольно перескакивать с одного места в файле на другое.
Объекты File не обеспечивают средства для работы со структурированными данными, как в простых базах данных. В структурированных файлах каждая запись занимает заранее определенное пространство, что позволяет считывать и записывать записи просто по их номерам. В VBA можно обеспечить и такой случайный метод доступа, но не с помощью объектов, а используя операторы VBA, такие как Open, Put и Get.
Открытие объектов текстовых потоков
Чтобы читать данные из файла или записывать их в файл, сначала нужно открыть файл как текстовый поток. В программном коде работа с текстовым потоком означает работу с объектом Text Stream. Начать эту работу можно одним из следующих трех способов.
* Открыть существующий объект File в режиме текстового потока.
* Создать новый файл и одновременно открыть его как текстовый поток.
* Открыть существующий на диске файл как текстовый поток.
В следующем примере процедуры этими тремя способами в указанном порядке открываются три отдельных объекта Text Stream, затем в один из этих объектов записываются данные, и объекты закрываются:
Sub TextStreamDemo()
Dim objFileSystem As FileSystemObject
Dim objFilel As File
Dim objTextStreaml As TextStream
Dim objTextStream2 As TextStream
Dim objTextStream3 As TextStream
Set ObjFileSystem = _
CreateObject("Scripting.FileSystemObject")
' Создание объекта File и использование его для создания объекта текстового потока
Set ObjFilel = _
objFileSystem.GetFile("С:СуществующийФайл.txt"]
Set objTextStreaml = _
objFilel.OpenAsTextStream(ForReading)
' Создание файла и открытие его как объекта _
' текстового потока
Set objTextStream2 = _
objFileSystem.CreateTextFile("C:Новый файл.txt")
' Открытие существующего файла как _
' текстовый поток
Set objTextStream3 = _
objFileSystem.OpenTextFile("C:Старыйфайл.txt")
' Запись двух строк текста в один из потоков
objTextStream2.WriteLine _
"Взвейтесь кострами, синие ночи!"
objTextStream2.WriteLine "Мы - пионеры, дети рабочих."
' Закрытие всех трех текстовых потоков
objTextStreaml.Close
objTextstream2.Close
objTextStream3.Close
End Sub
Хотя во всех трех случаях создаются объекты Text Stream, они не взаимозаменяемы. От выбранного в каждом конкретном случае способа зависит и способ доступа к данным в соответствующем файле. Подробнее об этом говорится в следующем разделе.
Каждый конкретный объект Text Stream позволяет либо читать данные из файла, либо записывать данные в файл, либо и то, и другое. Объект Text Stream позволяет выбрать для него один или несколько из трех режимов ввода-вывода. Один из этих режимов только для чтения, и есть два разных режима для записи - обычная запись (когда предполагается запись символов с самого начала текстового потока) и добавление (когда предполагается добавление символов в конец текстового потока).
Доступные для каждого конкретного объекта Text Stream режимы зависят от того, каким способом создан текстовый поток, а в случае метода OpenAsText Stream объекта File - от указанного для него режима. Вот соответствующая сводка.
Метод
Доступные режимы ввода-вывода для определенного объекта текстового потока
Create Text File (объект FileSystemObject)
Чтение и запись
Open Text File (объект ileSystemObject )