Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
курсовая / Источники / excel_2010_professionalnoe_programmirovanie_na_vba_RuLit_Me_412629.pdf
Скачиваний:
4
Добавлен:
27.09.2025
Размер:
22.97 Mб
Скачать

Глава L2 7 J

Управление файлами

спомощью VBA

Вэтой главе...

Часто выполняемые операции с файлами

Отображение расширенной информации о файле

Работа с текстовыми файлами

Примеры управления текстовыми файлами

Архивирование и разархивирование файлов

Модель ADO

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

Часто выполняемые операции с файлами

Пользователи Excel могут выполнять распространенные операции с файлами двумя способами.

Использовать традиционные операторы и функции VBA. Этот метод приме­ няется во всех версиях Excel.

Использовать объект F ileS ystem O b ject, который задействует библиотеку

Microsoft Scripting Library. Этот метод применяется в версиях Excel 2000 и выше.

П р ед у п р еж д ен и е

В предыдущих версиях Excel также использовался объект F ile S e a rc h , ко­ торый в Excel 2007 и более поздних версиях не поддерживается. Если вы­ звать на выполнение макрос, использующий объект F ile S e a rc h , отобра­ зится сообщение об ошибке.

786

Часть VII. Дополнительные темы

Вследующих разделах подробнее рассматриваются упомянутые выше два метода,

атакже приводится ряд примеров.

Управление файлами с помощью функций VBA

Функции VBA, предназначенные для управления файлами, приведены в табл. 27.1. Большинство из этих функций не требует дополнительных пояснений; все они описаны в справочной системе Excel.

Таблица 2 7 .1 . Ф ункции VB A, предназначенны е для управления ф айлам и

Функция

Назначение

ChDir

Изменяет текущую папку

ChDrive

Изменяет текущий диск

D ir

Возвращает имя файла или папки, которое соответствует определенному

 

шаблону или атрибуту файла

FileC opy

Копирует файл

FileD ateT im e

Возвращает дату и время последнего изменения файла

F ile L e n

Возвращает размер файла (в байтах)

G e tA ttr

Возвращает значение, которое представляет атрибут файла

K i l l

Удаляет файл

MkDir

Создает новую папку

Name

Переименовывает файл или папку

RmDir

Удаляет пустую папку

S e tA ttr

Изменяет атрибут файла

В оставшейся части раздела рассматриваются примеры, демонстрирующие примене­ ние описанных в табл. 27.1 функций.

О п ред елен и е ф акта сущ ествовани я ф айла

Представленная ниже функция возвращает значение True, если определенный файл существует. Если файл не существует, функция возвращает значение F a lse . Когда функция D ir возвращает пустую строку, то файл невозможно найти. В этом случае воз­ вращается значение F a lse .

F u n c tio n F ile E x is ts (fn a m e )

As

Boolean

F ile E x is ts = D ir(fn a m e )

<>

""

End F u n c tio n

 

 

Аргумент функции F ile E x is ts состоит из полного пути и имени файла. Функция может использоваться на рабочем листе, а также вызываться из кода VBA.

О п ред елен и е ф акта сущ ествовани я пути

Следующая функция возвращает значение True, если указанный путь существует. В противном случае функция возвращает значение F a lse .

F u n c tio n P athE xists(pnam e) As

Boolean

1

Возвращает

TRUE,

если путь

существует

 

On E rro r Resume

Next

 

End

P a th E x is ts

= (G etA ttr(pnam e) And v b D ire c to ry ) = v b D ire c to ry

F u n c tio n

 

 

 

788 Часть VII. Дополнительные темы

К о м п а к т-д и ск

На прилагаемом к книге компакт-диске в файле c re a te f i l e lis t . x ls m находится версия этой процедуры, позволяющая выбрать папку в диалого­ вом окне.

Функция D ir в качестве первого аргумента принимает символы подстановки. Чтобы получить список (например, файлов Excel), используйте следующий оператор:

f = D ir ( D ir e c to r y & " * . x l? ? " / vbReadOnly + vbHidden + vbSystem)

Этот оператор выбирает имя первого файла * .x l? ? в указанной папке. Использова­ ние символа подстановки приводит к тому, что возвращается четырехсимвольное расши­ рение, которое начинается символами XL. Например, расширение может записываться в виде XLSX, XLTX или XLAM. Второй аргумент функции D ir позволяет указывать атрибуты файлов (с применением встроенных констант, например). В рассматриваемом в этом раз­ деле примере функция D ir осуществляет выборку имен файлов с отсутствующими атрибу­ тами, файлов “только для чтения”, скрытых файлов, а также системных файлов.

В табл. 27.2 приводится перечень встроенных констант для функции D ir.

Таблица 2 7 .2 . Константы , определяю щ ие атрибуты ф айлов для ф ункции D ir

Константа

Значение

Описание

vbNoгт а 1

0

Файл без атрибутов. Это настройка, заданная по умолча­

 

 

нию, которая всегда активна

vbReadOnly

1

Файлы только для чтения

vbHidden

2

Скрытые файлы

vbSystem

4

Системные файлы

vbVolume

8

Метка тома. Если указан какой-либо другой атрибут, этот

 

 

атрибут игнорируется

v b D ire c to ry

16

Папки. Этот атрибут неработоспособен. Вызов функции D ir

 

 

с атрибутом v b D ire c to ry не позволяет постоянно возвра­

 

 

щать подпапки

П редупреж дение

Если функция D ir применяется для циклического обхода файлов, а для управления этими файлами вызывается другая процедура, убедитесь в том, что последняя процедура не использует функцию D ir. Активным может быть только единственный “набор” вызовов функции D ir.

П рим енение рекурсивной процедуры для отображ ения сп иска ф айлов

во вложенных папках

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

P u b lic

Sub

R e c u rs iv e D ir(B y V a l C u rrD ir As S tr in g , _

O p tio n a l

ByVal

L e ve l As Long)

Dim

D irs O

As S trin g

Dim

NumDirs

As

Long

Dim

FileName As

S trin g

Dim

PathAndName

As S trin g

Глава 27. Управление файлами с помощью VBA

 

789

1

Dim i As

Long

 

символа

обратной

черты

в

конце пути

Проверка

наличия

'

I f R ig h t(C u rrD ir,

1) <>

" \ "

Then

C u rrD ir

=

C u rrD ir & " \ "

Помещение

заголовков столбцов на активном листе

 

C e lls (1,

1)

=

"П уть"

 

 

 

 

 

 

C e lls (1,

2)

=

"Имя файла"

 

 

 

 

 

C e lls (1,

3)

=

"Размер"

 

 

 

 

 

 

C e lls (1,

4)

=

"Дата/время"

True

 

 

 

 

Range("A l :D l" ) . F o n t. B old

=

 

 

 

'Получение файлов

FileName

= D ir ( C u r r D ir

&

0

v b D ire c to ry )

 

Do

W h ile

Len(FileN am e)

<>

Then

1 Текущая

папка

 

I f

L e ft(F ile N a m e ,

1)

<>

 

 

PathAndName =

C u rrD ir & FileName

 

 

 

I f

(G etAttr(PathAndN am e)

And

v b D ire c to ry ) = _

 

 

 

v b D ire c to ry

Then

 

папки

 

 

 

 

 

' Сохранить

найденные

 

S trin g

 

 

 

ReDim P reserve

D irs (0

To

NumDirs) As

 

 

 

D irs(N um D irs)

=

PathAndName

 

 

 

 

 

NumDirs = NumDirs + 1

 

 

 

 

 

 

E lse

 

и

файла

на

листе

 

 

 

 

' Запись пути

 

 

 

 

C e lls (W o rk s h e e tF u n c tio n .C o u n tA _

 

 

 

 

(Range( " А :А " ) ) + 1 ,

1)

=

C u rrD ir

 

 

 

 

C e lls (W o rk s h e e tF u n c tio n . C ountA ( _

 

 

 

 

R a n g e ("B :B "))

+ 1 , 2)

= FileName

 

 

 

 

C e lls (W o rk s h e e tF u n c tio n .C o u n tA ( _

 

 

 

 

Range( "С : C "))

+ 1 , 3)

= FileLen(PathAndNam e)

 

 

 

C e lls (W o rk s h e e tF u n c tio n .C o u n tA ( _

 

 

 

 

Range( "D :D "))

+ 1 , 4)

= _

 

 

End

I f

FileDateTim e(PathAndNam e)

 

 

 

End

 

 

 

 

 

 

 

 

I f

 

 

 

 

 

 

 

 

 

 

FileNam e = D ir ( )

 

 

 

 

 

 

 

Loop

 

 

 

 

 

 

 

 

 

'Рекурсивный просмотр найденных папок

For i

= 0 То NumDirs - 1

R e c u rs iv e D ir D i r s ( i ) , L e ve l + 2

N ext

i

End Sub

Процедура использует единственный аргумент C u r r D ir , который представляет со­ бой просматриваемую папку. Информация о каждом файле отображается в активном ра­ бочем листе. В процессе циклического обхода файлов названия подпапок записываются в массив D ir s . Если файлы не найдены, процедура вызывает саму себя, причем в каче­ стве аргумента используется элемент массива D ir s . После завершения обработки всех папок массива D ir s процедура завершает свою работу.

Поскольку процедура R e c u r s iv e D ir использует аргумент, для ее вызова из другой процедуры применяется следующий оператор:

C a ll R e c u rs iv e D ir( " с : \ d ir e c t o r y \ ")

К о м п а к т-д и ск

На прилагаемом компакт-диске находится версия этой процедуры, которая позволяет выбирать папку в диалоговом окне. Код этой процедуры находит­ ся в файле re c u rs iv e f i l e lis t . x ls m .