цКЮБЮ 13.

пЮАНРЮ Я ТЮИКЮЛХ

рХОШ ТЮИКНБ Б VBA

б VBA ДНОСЯРХЛЮ ПЮАНРЮ Я РПЕЛЪ РХОЮЛХ РЕЙЯРНБШУ ТЮИКНБ. .

тЮИК ОНЯКЕДНБЮРЕКЭМНЦН ДНЯРСОЮ

пЮЯЯЛЮРПХБЮЕРЯЪ ЙЮЙ ОНЯКЕДНБЮРЕКЭМНЯРЭ ЯРПНЙ ОПНХГБНКЭМНИ ДКХМШ, ПЮГДЕКЕММШУ ЯОЕЖХЮКЭМШЛХ ЯХЛБНКЮЛХ. вРЕМХЕ Х ГЮОХЯЭ Б ТЮИК ОПНХГБНДХРЯЪ ОНЯРПНВМН

тЮИК ОПНХГБНКЭМНЦН ДНЯРСОЮ

яНЯРНХР ХГ ГЮОХЯЕИ ТХЙЯХПНБЮММНИ ДКХМШ Х ПЮГЛЕП ГЮОХЯХ СЙЮГШБЮЕРЯЪ ОПХ ЕЦН НРЙПШРХХ. щРН ОНГБНКЪЕР КНЙЮКХГНБЮРЭ КЧАСЧ ГЮОХЯЭ Б ТЮИКЕ ОН ЕЕ МНЛЕПС

аХМЮПМШИ ТЮИК

ъБКЪЕРЯЪ ВЮЯРМШЛ ЯКСВЮЕЛ ТЮИКЮ ОПНХГБНКЭМНЦН ДНЯРСОЮ. пЮГЛЕП ГЮОХЯХ Б АХМЮПМНЛ ТЮИКЕ ЯВХРЮЕРЯЪ ПЮБМШЛ 1 АЮИРС

 

нРЙПШРХЕ Х ГЮЙПШРХЕ ТЮИКЮ

нАЯСДХЛ ХМЯРПСЙЖХХ, ЯБЪГЮММШЕ Я НРЙПШРХЕЛ ТЮИКЮ ДКЪ НОЕПЮЖХИ ББНДЮ/БШБНДЮ, Ю РЮЙФЕ Я ГЮЙПШРХЕЛ ТЮИКЮ ОН ГЮБЕПЬЕМХЧ ПЮАНРШ Я МХЛ.

Open

пЮГПЕЬЮЕР БШОНКМЕМХЕ НОЕПЮЖХИ ББНДЮ/БШБНДЮ ОПХ ПЮАНРЕ Я ТЮИКНЛ.

яХМРЮЙЯХЯ:

Open оСРЭ For пЕФХЛ [Access дНЯРСО] [аКНЙХПНБЙЮ] As [ # ] мНЛЕПтЮИКЮ [LЕn=дКХМЮ]

  • оСРЭ ≈ ЯРПНЙНБНЕ БШПЮФЕМХЕ, СЙЮГШБЮЧЫЕЕ ХЛЪ ТЮИКЮ
  • пЕФХЛ ≈ СЯРЮМЮБКХБЮЕР ПЕФХЛ ПЮАНРШ Я ТЮИКНЛ. дНОСЯРХЛШЕ гМЮВЕМХЪ: Append, Binary, Input, Output ХКХ Random
  • дНЯРСО ≈ СЯРЮМЮБКХБЮЕР НОЕПЮЖХХ, ПЮГПЕЬЕММШЕ Я НРЙПШРШЛ ТЮИКНЛ. дНОСЯРХЛШЕ ГМЮВЕМХЪ: Read, Write ХКХ Read Write
  • аКНЙХПНБЙЮ ≈ СЯРЮМЮБКХБЮЕР НОЕПЮЖХХ, ПЮГПЕЬЕММШЕ Я НРЙПШРШЛ ТЮИКНЛ ДПСЦХЛ ОПНЖЕЯЯЮЛ. дНОСЯРХЛШЕ ГМЮВЕМХЪ:
  • Shared, Lock Read, Lock Write Х Lock Read Write Х МНЛЕПтЮИКЮ ≈ ДНОСЯРХЛШИ МНЛЕП ТЮИКЮ. вХЯКН Б ХМРЕПБЮКЕ НР 1 ДН 255. нАПЮРХРЕ БМХЛЮМХЕ МЮ РН, ВРН ОЮПЮЛЕРПС мНЛЕП-тЮИКЮ ОПЕДЬЕЯРБСЕР ЯХЛБНК #. гМЮВЕМХЕ МНЛЕПтЮИКЮ МЕКЭГЪ ХГЛЕМЪРЭ, ОНЙЮ ТЮИК НРЙПШР. мН ОПХ ЯКЕДСЧЫЕЛ НРЙПШРХХ ТЮИКЮ МНЛЕПтЮИКЮ ЛНФЕР АШРЭ ДПСЦХЛ ВХЯКНЛ
    ДКХМЮ ≈ ВХЯКН, ЛЕМЭЬЕЕ КХАН ПЮБМНЕ 32 767 (АЮИР). дКЪ ТЮИКНБ, НРЙПШРШУ Б ПЕФХЛЕ Random, ЩРН ГМЮВЕМХЕ ЪБКЪЕРЯЪ ДКХМНИ ГЮОХЯХ. дКЪ ТЮИКНБ Я ОНЯКЕДНБЮРЕКЭМШЛ ДНЯРСОНЛ ЩРН ГМЮВЕМХЕ ЪБКЪЕРЯЪ ВХЯКНЛ АСТЕПХГСЕЛШУ ЯХЛБНКНБ оПН ХМЯРПСЙЖХЧ open БЮФМН РЮЙФЕ ГМЮРЭ, ВРН БН БПЕЛЪ ЕЕ ПЮАНРШ VBA РЮЙФЕ ПЕГЕПБХПСЕР ТЮИКНБШИ АСТЕП Б ОЮЛЪРХ ЙНЛОЭЧРЕПЮ ДКЪ СЯЙНПЕМХЪ ОПНЖЕЯЯЮ ГЮОХЯХ Х ЯВХРШБЮМХЪ (ОПЪЛНЕ ГЮОХЯШБЮМХЕ ХМТНПЛЮЖХХ МЮ ДХЯЙ ЛНФЕР ЯСЫЕЯРБЕММН ГЮЛЕДКХРЭ БШОНКМЕМХЕ ОПНЦПЮЛЛШ, ВРН НЯНАЕММН ГЮЛЕРМН ОПХ ПЮАНРЕ Я АНКЭЬХЛХ ТЮИКЮЛХ). лЮЙЯХЛЮКЭМНЕ ВХЯКН ТЮИКНБШУ АСТЕПНБ СЯРЮМЮБКХБЮЕРЯЪ Б ЯХЯРЕЛМНЛ ТЮИКЕ Config.sys

Close

гЮБЕПЬЮЕР НОЕПЮЖХХ ББНДЮ/БШБНДЮ Я ТЮИКНЛ, НРЙПШРШЛ Я ОНЛНЫЭЧ ХМЯРПСЙЖХХ open. щРЮ ХМЯРПСЙЖХЪ 'НВХЫЮЕР АСТЕП Х СЙЮГШБЮЕР НОЕПЮЖХНММНИ ЯХЯРЕЛЕ НАМНБХРЭ FAT (РЮАКХЖС ПЮГЛЕЫЕМХЪ ТЮИКНБ). бЮФМН, ВРНАШ ЙЮФДШИ ТЮИК ОН ГЮБЕПЬЕМХХ ПЮАНРШ Я МХЛ АШК ГЮЙПШР, ХМЮВЕ ЩРН ЛНФЕР ОПХБЕЯРХ Й ВЮЯРХВМНИ ОНРЕПЕ ХМТНПЛЮЖХХ.

яХМРЮЙЯХЯ:

Close [яОХЯНЙмНЛЕПНБтЮИКНБ] юПЦСЛЕМР яОХЯНЙмНЛЕПНБтЮИКНБ ЛНФЕР ОПЕДЯРЮБКЪРЭ НДХМ ХКХ МЕЯЙНКЭЙН МНЛЕПНБ ТЮИКНБ. оПХ ЩРНЛ ХЯОНКЭГСЕРЯЪ ЯКЕДСЧЫХИ ЯХМРЮЙЯХЯ, ЦДЕ МНЛЕПтЮИКЮ ОПЕДЯРЮБКЪЕР КЧАНИ ДНОСЯРХЛШИ МНЛЕП ТЮИКЮ: [[#] МНЛЕПтЮИКЮ] [, [#] МНЛЕПтЮИКЮ] ...

Reset

гЮЙПШБЮЕР БЯЕ ЮЙРХБМШЕ ТЮИКШ, НРЙПШРШЕ Я ОНЛНЫЭЧ ХМЯРПСЙЖХХ open, Х ГЮОХЯШБЮЕР ЯНДЕПФХЛНЕ БЯЕУ АСТЕПНБ ТЮИКНБ

мЮ ДХЯЙ, НРЙПШРШУ Я ОНЛНЫЭЧ ХМЯРПСЙЖХХ Open

FreeFile

тСМЙЖХЪ БНГБПЮЫЮЕР ДНЯРСОМШИ МНЛЕП, ЙНРНПШИ ЛНФЕР ХЯОНКЭГНБЮРЭЯЪ Б ХМЯРПСЙЖХХ Open

оПХБЕДЕЛ ОПХЛЕП ХМЯРПСЙЖХХ, НРЙПШБЮЧЫЕИ ДКЪ ГЮОХЯХ АХМЮПМШИ ТЮИК ОЕПБШИ ХГ ПЮАНВЕИ ОЮОЙХ, Х ГЮРЕЛ ХМЯРПСЙЖХХ, ГЮЙПШБЮЧЫЕИ ЩРНР АХМЮПМШИ ТЮИК.

Open "оЕПБШИ" For Binary Access Write As #1 Close #1

бБНД ДЮММШУ Б ТЮИК ОНЯКЕДНБЮРЕКЭМНЦН ДНЯРСОЮ

нАЯСДХЛ ХМЯРПСЙЖХХ, ХЯОНКЭГСЕЛШЕ ОПХ ББНДЕ ХМТНПЛЮЖХХ Б ТЮИК ОНЯКЕДНБЮРЕКЭМНЦН ДНЯРСОЮ.

Print

гЮОХЯШБЮЕР ТНПЛЮРХПНБЮММШЕ ДЮММШЕ Б ТЮИК ОНЯКЕДНБЮРЕКЭМНЦН ДНЯРСОЮ. яХМРЮЙЯХЯ:

Print #мНЛЕПтЮИКЮ, [яОХЯНЙбШБНДЮ]

  • МНЛЕПтЮИКЮ ≈ МНЛЕП ТЮИКЮ н ЯКХЯНЙбШБНДЮ ≈ БШПЮФЕМХЕ (ХКХ ЯОХЯНЙ БШПЮФЕМХИ), ГЮОХЯШБЮЕЛНЕ Б ТЮИК. б ЮПЦСЛЕМРЕ яОХЯНЙбШБНДЮ ПЮГДЕКХРЕКЕЛ ЯОХЯЙЮ БШБНДХЛШУ БШПЮФЕМХИ ЪБКЪЕРЯЪ ";" (ДЮММШЕ БШБНДЪРЯЪ ОНДПЪД) ХКХ "," (ДЮММШЕ БШБНДЪРЯЪ ОН ГНМЮЛ). йПНЛЕ РНЦН, Б ЮПЦСЛЕМРЕ яОХЯНЙбШБНДЮ ДНОСЯЙЮЕРЯЪ ХЯОНКЭГНБЮМХЕ ТСМЙЖХИ Spc Х РЮЭ:
    • spc(n) ≈ ХЯОНКЭГСЕРЯЪ ДКЪ БЯРЮБЙХ О ОПНАЕКНБ Б ТЮИК
    • Tab(n) ≈ СЯРЮМЮБКХБЮЕР ЙСПЯНП Б ЯРНКАЕЖ Я МНЛЕПНЛ n

Write

гЮОХЯШБЮЕР МЕТНПЛЮРХПНБЮММШЕ ДЮММШЕ Б ТЮИК ОНЯКЕДНБЮРЕКЭМНЦН ДНЯРСОЮ. б НРКХВХЕ НР ХМЯРПСЙЖХХ Print, ХМЯРПСЙЖХЪ write БЯРЮБКЪЕР ГЮОЪРШЕ ЛЕФДС ЩКЕЛЕМРЮЛХ Х ГЮЙКЧВЮЕР ЯРПНЙХ Б ЙЮБШВЙХ ОН ЛЕПЕ ГЮОХЯХ ХУ Б ТЮИК.

яХМРЮЙЯХЯ:

Write #мНЛЕПтЮИКЮ, [яОХЯНЙбШБНДЮ]

  • мНЛЕПтЮИКЮ ≈ МНЛЕП ТЮИКЮ
  • яОХЯНЙбШБНДЮ ≈ БШПЮФЕМХЕ ХКХ ЯОХЯНЙ БШПЮФЕМХИ, ГЮОХЯШБЮЕЛШУ Б ТЮИК дЮММШЕ, ГЮОХЯЮММШЕ Я ОНЛНЫЭЧ ХМЯРПСЙЖХХ write, НАШВМН ЯВХРШБЮЧРЯЪ ХГ ТЮИКЮ Я ОНЛНЫЭЧ ХМЯРПСЙЖХХ input

оПХБЕДЕЛ ДБЕ ОПНЖЕДСПШ, ХЯОНКЭГСЧЫХЕ ХМЯРПСЙЖХХ Print Х write ДКЪ ЯНГДЮМХЪ ТЮИКНБ ОНЯКЕДНБЮРЕКЭМНЦН ДНЯРСОЮ. яМЮВЮКЮ ПЮЯЯЛНРПХЛ ОПНЖЕДСПС Я ХМЯРПСЙЖХЕИ

Print. Sub

оПХЛЕПхЯОНКЭЩНБЮМХЪ Print

Open "я:\мНБШИ" For Output As II

' оЕВЮРЮЕР РЕЙЯР Б ТЮИК '

Print #1, "рЕЯР"

'

' оЕВЮРЮЕР ОСЯРСЧ ЯРПНЙС Б ТЮИК

'

Print #l,

'

' оЕВЮРЮЕР Б ДБСУ ГНМЮУ ОЕВЮРХ

'

Print #1, "гНМЮ 1";

Tab;

"Зона 2" ;

Spc(3) ;

"3 пробела"

Close #1

End Sub

Результатом описанных выше инструкций будет файл со следующим содержимым:

Тест

Зона 1 Зона 2 3 пробела

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

Достпа при помощи инструкции Write.

Sub ПримерИспользованияwriteе

Open "ЕщеПример"

For Output As #1

Write #1, "Пример";

"использования"

Write #l, "инструкции";

Write #1, "Write"

x = 1

Write #1, "Число";

х Close #1

End Sub

Результатом описанных выше инструкций будет файл со следующим содержимым:

"Пример","использования" "инструкции","Write" "Число",1

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

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

Вывод данных из файла последовательного доступа

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

Input #

Считывает .данные из открытого файла последовательного доступа и присваивает их переменным. Данные, считываемые с помощью инструкции input I, обычно записываются в файл с помощью инструкции Write #.

Синтаксис:

Input #НомерФайла, СписокПеременных

  • номерФайла ≈ номер файла
  • СписокПеременных ≈ список переменных, которым следует присвоить значения, считанные из файла. Переменные в списке разделяются запятыми

Line Input #

Считывает строку из открытого файла последовательного доступа и присваивает ее переменной типа string. Данные, считываемые с помощью инструкции Line input I, как правило, записываются в файл с помощью инструкции Print #.

Синтаксис:

Line Input #НомерФайла, ИмяПеременной

Синтаксис инструкции Line Input1 содержит следующие элементы:

  • НомерФайла ≈ номер файла
  • ИмяПеременной ≈ имя переменной типа Variant или String

Функция

Input

Возвращает значение типа string, содержащее символы из файла, открытого в режиме input или Binary. Функция input считывает данные, записываемые в файл с помощью инструкции Print # или Put.

Синтаксис:

Input (Число, [#] НомерФайла)

  • Число задает число возвращаемых символов. Если аргумент Число равен 1, то производится посимвольное считывание данных.

ФУНКЦИЯ EOF

Функция возвращает значение True при достижении конца файла.

Синтаксис:

EOF (НомерФайла} При последовательном считывании информации из файла часто используется следующий цикл:

Do While Not EOF(l) Loop

или, для тех пользователей, кто предпочитает инструкцию While - Wend инструкции Do While - Loop, следующий эквивалентный цикл:

While Not EOF (I) Wend


Приведем пример использования инструкции input # для считывания данных из файла. В этом примере предполагается, что на диске существует файл группаЭкономистов, содержащий информацию о студентах. Файл был создан при помощи инструкции write # и состоит из двух столбцов, в первом из которых указывается фамилия, а во втором ≈ оценка студента. Для удобства работы с информацией введен пользовательский тип Студенты. Процедура примериспользованияInput последовательно считывает фамилии и оценки из файла и выводит их в ячейки первого и второго столбца рабочего листа.

Туре Студенты

' Фамилия As String * 20

Оценка As String * 3

End Type

Sub ПримерИспользованияInput()

Dim Студент As Студенты

Open "ГруппаЭкономистов"

For Input As 12 i = 1

Do While Not EOF(2) With Студент

Input #2, .Фамилия, .Оценка

Cells(i, 1).Value = .Фамилия

Cells(i, 2).Value = .Оценка

End With

i = i + 1 Loop

Close #2

End Sub

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

Private Sub UserForm_Initialize()

Dim Студент As String

Open "ГруппаЭкономистов"

For Input As #1

i = 1

With ListBoxl

.Clear Do While Not EOF(l)

Line Input 11, Студент

.Addltem Студент

i = i + 1 Loop

Close #l

End With

End Sub

Работа с файлом произвольного доступа

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

Put

Записывает содержимое переменной в файл произвольного доступа.

Синтаксис:

Put [#] НомерФайла, [НомерЗаписи] , ИмяПеременной

  • НомерФайла ≈ номер файла
  • НомерЗаписи ≈ номер записи (режим Random) или номер байта (режим Binary), с которого следует начать запись. Если аргумент НомерЗаписи опущен, то записывается на то место, где был установлен указатель после выполнения последней инструкции Get или Put, либо куда он переведен с помощью функции Seek
  • ИмяПеременной ≈ имя переменной, содержащей данные, которые следует записать в файл

Get

Читает данные из открытого файла произвольного доступа в переменную. Синтаксис:

Get [#] НомерФайла, [НомерЗаписи] , ИмяПеременной

  • НомерФайла ≈ номер файла
  • НомерЗаписи ≈ номер записи (для файлов в режиме Random) или номер байта (для файлов в режиме Binary), с которого следует начать чтение
  • Имяпеременной ≈ имя переменной, в которую следует поместить считанные данные

Seek

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

Синтаксис:

Seek (НомерФайла)

LOF

Функция возвращает значение типа Long, представляющее размер файла в байтах, открытого с помощью инструкции Оpen . Для определения размера закрытого файла следует использовать функции FileLen.

Синтаксис:

LOF (НомерФайла)

FileLen

Возвращает значение типа Long, содержащее размер файла в байтах.

Синтаксис:

FileLen (Путь )

Как видно из приведенного в предыдущем разделе примера для считывания информации при помощи инструкции input # из файла группаЭкономистов, файл последовательного доступа иногда удобно задавать как последовательность записей (в данном случае, записей о студентах), причем каждая из записей формируется из группы полей (в данном случае из полей Фамилия и оценка). Отметим, что такая группировка по записям не является чем-то присущим файлам последовательного доступа. Это просто подход, позволяющий упростить процесс последовательного считывания записей. В файле последовательного доступа существует только одна внутренняя структура, образованная разделителями (запятыми или специальными символами, обозначающими переход на новую строку).

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

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

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

Отметим, что при открытии файла произвольного доступа, в отличие от файла последовательного доступа, не надо специально указывать, открывается он для ввода или вывода информации. Ввод и вывод информации определяют команды Put и Get.

Приведем один, пример работы с файлом произвольного доступа группа Экономистов, который имеет ту же структуру, что и в предыдущем примере. Файл создается с помощью процедуры записьвоайл, которая последовательно считывает данные из первого и второго столбца рабочего листа и затем вводит их в файл. В этой процедуре число вводимых записей фиксировано и равно 5. Процедура Считываниеизфайла производит обратное действие ≈ считывает данные из файла и вводит их в ячейки третьего и четвертого столбца рабочего листа. Интересной особенностью файла произвольного доступа является то, что при работе с ним можно определить число записей не пересчитывая их. Число записей равно отношению размера файла к длине одной записи. Длина записи устанавливается при создании файла произвольного доступа и определяется типом переменной, при помощи которой файл был создан, размер открытого файла возвращается функцией LOF, а еще не открытого ≈ функцией FileLen. В рассматриваемом случае число записей в файле равно LOF(l) / Len(Студент).

Туре Студенты

Фамилия As String * 20 Оценка As String * 3

End Type

'

Sub ЗаписьВФайл()

Dim Студент As Студенты

Dim i As Integer

Open "ГруппаЭкономистов"

For Random As #1 Len = Len(Студент)

For i = 1 To 5

With Студент

.Фамилия = Cells(i, 1).Value .Оценка = Cells(i, 2).Value

End With

Put #1, i, Студент

Next i

Close #1

End Sub '

Sub СчитываниеИзФайла()

Dim Студент As Студенты

Dim i As Integer

Dim n As Integer

Open "ГруппаЭкономистов"

For Random As #1 Len = Len(Студент)

n = LOF(l) / Len(Студент)

For i = 1 To n

Get #1, i, Студент

With Студент

Cells (i, 3) .Value = .Фамилия Cells(i, 4).Value = .Оценка

End With

Next i

Close #1

End Sub

Наиболее употребляемые инструкции и функции при работе с файлами

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

ChDir

Изменяет текущую папку. Синтаксис:

ChDir путь

ChDrive

Изменяет текущий диск. Синтаксис:

ChDrive диск Например, ChDrive "D"

CurDir

Функция возвращает текущую папку

FileAttr

Возвращает значение типа Long, представляющее режим файла, открытого с помощью инструкции open. Возвращаемые значения: 1 (для режима input), 2 (output), 4 (Random), 8 (Append) и 32 (Binary).

Синтаксис:

FileAttr (НомерФайла, Тип)

  • НомерФайла ≈ допустимый номер файла
  • Тип ≈ число, указывающее характер возвращаемых данных. Если тип установлен равным 1 , то функция FileAttr возвращает значение, указывающее режим работы файла

GetAttr

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

Синтаксис:

GetAttr (путь)

SetAttr

Устанавливает атрибуты файла.

Синтаксис:

SetAttr pathname, attributes

Атрибуты в аргументе attributes определяются как сумма констант из табл. 13.1

FileCopy

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

Синтаксис:

FileCopy source, destination

Аргументы:

  • source ≈ строковое выражение, указывающее имя копируемого файла
  • destination ≈ строковое выражение, указывающее имя результирующего файла. Аргумент destination может содержать имя каталога или папки и диска

FileDateTime

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

Синтаксис:

FileDateTime (путь )

Kill

Удаляет существующий файл.

Синтаксис:

Kill путь

В аргументе путь допустимо использование символой (*) и (?) для удаления нескольких файлов по маске.

MkDir

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

Синтаксис:

MkDir путь

RmDir

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

Синтаксис:

RmDir путь

 

Табл. 13.1. Константы атрибутов файла

Константа
Значение
Описание

vbNormal

0

Обычный

vbReadOnly

i

Только чтение

vbHidden

2

Скрытый

vbSystem

4

Системный

vbDi rector у

16

Каталог или папка

vbArchive

32

Файл был изменен после последнего резервирования

 

Объект FileSearch

Объект FileSearch обладает функциональными возможностями диалогового окна Открытие документа (Open), отображаемого на экране_посредством выбора команды Файл, Открыть (File, Open). Объект FileSearch входит в объект Application и иерархически включает в себя (рис. 13.1):

Рис. 13.1. Иерархическая структура объекта FileSearch

Объект FileSearch возвращается свойством FileSearch объекта Application.

Объект FileSearch имеет следующие два метода.

Execute

Поиск специфицированных файлов.

Синтаксис:

Execute (SortBy, SortOrder, AlwaysAccurate)

Аргументы:

  • SortBy ≈ устанавливает способ сортировки файлов. Допустимые значения: msoSortbyFileName, msoSortbyFileType, msoSortbyLastModif led и msoSortbySize
  • SortOrder ≈ устанавливает порядок сортировки файлов.
    Допустимые значения: msoSortOrderAscending и msoSort Order Descending
  • AiwaysAccurate ≈ допустимые значения: True (поиск среди измененных файлов) и False (в противном случае)

NewSearch

Устанавливает критерии, используемые при поиске по умолчанию

Приведем наиболее часто применяемые свойства объекта FileSearch.

FileName

Устанавливает имя файла для поиска. Допустимо использование символов (*) и (?)

FileType

Задает тип файла для поиска. Допустимые значения:

msoFileTypeAHFiles, msoFileTypeBinders, msoFile-TypeDatabases, msoFileTypeExcelWorkbooks, msoFi-leTypeOff ice Files, ms о FileType Power Point Presentations, msoFileTypeTemplates И msoFileTypeWordDocuments

Lookln

Задает папку для поиска файла

SearchSubFolders

Допустимые значения: True (поиск также проводить в поддиректориях) и False (в противном случае)

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

Private Sub UserForm_Initialize()

ComboBoxl.Clear With Application.FileSearch

.FileName = "*.xls" .SearchSubFolders = False

If .Execute(SortBy:=msoSortByFileName,

sortorder:=msoSortOrderAscending) > 0 Then

For i = 1 To .FoundFiles.Count

ComboBoxl.Addltem .FoundFiles(i)

Next i

End If

End With

End Sub

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

Private Sub UserForm_Initialize()

Dim ИмяПапки As String

Dim ИмяФайла As String

Dim ДлинаПути As Integer

ComboBoxl.Clear ИмяПапки = CurDir ДлинаПути = Len(ИмяПапки)

With Application.FileSearch .FileName = "*.xls"

.SearchSubFolders = False

If .Execute (SortBy:=msoSortByFileName,

sortorder:=msoSortOrderAscending) > 0 Then

For i = 1 To .FoundFiles.Count

ИмяФайла = Right(.FoundFiles(i), Len(.FqundFiles(i))

- ДлинаПути - 1) ComboBoxl.Addltem ИмяФайла

Next i

End If

End With

End Sub