Робота з файламі_vba

Відкриття та закриття файлу

Обговоримо інструкції, пов'язані з відкриттям файлу для операцій введення / виводу, а також із закриттям файлу по завершенню роботи з ним.

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 [СпісокНомеровФайлов] Аргумент СпісокНомеровФайлов може представляти один або кілька номерів файлів. При цьому використовується наступний синтаксис, де номерФайла представляє будь-якої допустимий номер файлу: [[#] номерФайла] [, [#] номерФайла].

Робота з файламі_vba

Reset Закриває всі активні файли, відкриті за допомогою інструкції open, і записує вміст всіх буферів файлів

На диск, відкритих за допомогою інструкції Open

FreeFile Функція повертає доступний номер, який може використовуватися в інструкції

Наведемо приклад інструкції, що відкриває для запису бінарний файл перший з робочою папки, і потім інструкції, що закриває цей бінарний файл.

Open "Перший" For Binary Access Write As # 1 Close # 1

Введення даних в файл послідовного доступу

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

Наведемо приклад використання інструкції input # для зчитування даних з файлу. У цьому прикладі передбачається, що на диску існує файл група Економістів, що містить інформацію про студентів. Файл був створений за допомогою інструкції write # і складається з двох стовпців, в першому з яких вказується прізвище, а в другому - оцінка студента. Для зручності роботи з інформацією введений призначений для користувача тип Студенти. Процедура приклад використання Input послідовно зчитує прізвища та оцінки з файлу і виводить їх в осередки першого і другого шпальти робочого листа.

'Прізвище As String * 20

Оцінка As String * 3 End Type

Sub ПрімерІспользованіяInput () Dim Студент As Студенти

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

Наведемо приклад використання інструкції Line input # для зчитування даних з файлу группаЕкономістов, що має ту ж структуру, що і в попередньому прикладі, але створеного за допомогою інструкції Print #. Інструкція Line input # зчитує всю рядок з файлу в строкову змінну. Тому в цьому випадку вже немає необхідності використовувати введений призначений для користувача тип, а досить обмежитися лише звичайною строкової змінної. Вся прочитується інформація рядок за рядком вводиться в список діалогового

Private Sub UserForm_Initialize () Dim Студент As String

Open "ГруппаЕкономістов" For Input As # 1

Clear Do While Not EOF (l) Line Input 11, Студент

Addltem Студент i = i + 1 Loop Close #l

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

Наведемо інструкції введення / виведення інформації при роботі з файлом довільного доступу, а також інструкції визначення довжини файлу і поточної позиції вказівника у файлі.

Put Записує вміст змінної в файл довільного доступу. синтаксис:

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

НомерФайла - номер файлу

НомерЗапісі - номер запису (режим Random) або номер байта (режим Binary), з якого слід почати запис. Якщо аргумент НомерЗапісі опущений, то записується на те місце, де був встановлений покажчик після виконання останньої інструкції Get або Put, або куди він переведений за допомогою функції

Робота з файламі_vba

ІмяПеременной - ім'я змінної, що містить дані, які слід записати в файл

Get Читає дані з відкритого файлу довільного доступу в змінну. синтаксис:

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

НомерФайла - номер файлу

НомерЗапісі - номер запису (для файлів в режимі Random) або номер байта (для файлів в режимі Binary), з якого слід почати читання Імяпеременной - ім'я змінної, в яку слід помістити лічені дані

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

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

FileLen Повертає значення типу Long, що містить розмір файлу в байтах. синтаксис:

Як видно з наведеного в попередньому розділі прикладу для зчитування інформації за допомогою інструкції input # з файлу группаЕкономістов, файл послідовного доступу іноді зручно задавати як послідовність записів (в даному випадку, записів про студентів), причому кожна із записів формується з групи полів (в даному випадку з полів Прізвище і оцінка). Відзначимо, що таке угрупування по записах не є чимось властивим файлів послідовного доступу. Це просто підхід, що дозволяє спростити процес послідовного зчитування записів. У файлі послідовного доступу існує тільки одна внутрішня структура, утворена роздільниками (комами або спеціальними символами, які позначають перехід на новий рядок).

На противагу файлів послідовного доступу, в файлах довільного доступу запис є вбудованим елементом. Файл довільного доступу - це файл, упорядкований по записах, що дозволяє швидко переміститися на будь-який запис, минаючи попередні.

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

На практиці буває зручно створювати окремий файл, в якому зберігається інформація про структуру файлу довільного доступу: структура записи, її довжина і заголовки полів. Відзначимо, що при відкритті файлу довільного доступу, на відміну від файлу послідовного доступу, не треба спеціально вказувати, відкривається він для введення або виведення інформації. Введення і виведення інформації визначають команди Put і Get.

Наведемо один, приклад роботи з файлом довільного доступу група Економістів, який має ту ж структуру, що і в попередньому прикладі. Файл створюється за допомогою процедури запісьвоайл, яка послідовно зчитує дані з першого і другого шпальти робочого листа і потім вводить їх в файл. У цій процедурі число вводяться записів фіксоване і дорівнює 5. Процедура Зчитування з файлу виробляє зворотну дію - зчитує дані з файлу і вводить їх в осередки третього і четвертого стовпця робочого листа. Цікавою особливістю файлу довільного доступу є те, що при роботі з ним можна визначити число записів не перераховуючи їх. Число записів дорівнює відношенню розміру файлу до довжини запису. Довжина запису встановлюється при створенні файлу довільного доступу і визначається типом змінної, за допомогою якої файл був створений, розмір відкритого файлу повертається функцією LOF, а ще не

Робота з файламі_vba

відкритого - функцією FileLen. В даному випадку число записів в файлі одно

Прізвище As String * 20 Оцінка As String * 3 End Type

Робота з файламі_vba

Об'єкт FileSearch має функціональні можливості діалогового вікна Відкриття документа (Open), що відображається на екране_посредством вибору команди Файл, Відкрити (File, Open). Об'єкт FileSearch входить в об'єкт Application і ієрархічно включає в себе

Сімейство FoundFiles, яке є списком всіх файлів, що повертаються в результаті пошуку

Сімейство PropertyTests, яке є списком всіх критеріїв пошуку

Мал. 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.

Наступний приклад дозволяє в поле зі списком діалогового вікна вивести список всіх файлів поточної папки:

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)

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"

If .Execute (SortBy: = msoSortByFileName, sortorder: = msoSortOrderAscending)> 0 Then For i = 1 To .FoundFiles.Count

Имяфайла = Right (.FoundFiles (i), Len (.FqundFiles (i)) - ДлінаПуті - 1) ComboBoxl.Addltem имяфайла

End If End With End Sub

Схожі статті