Vba excel атрибут файла

Содержание

  1. Объект File. Работа с файлами
  2. Открытие файла
  3. Проверка существования файла
  4. Получение информации о файле
  5. Манипулирование файлами
  6. Создание временных файлов
  7. Семейство Files
  8. Функция Dir
  9. Синтаксис
  10. Параметры
  11. Примечания
  12. См. также
  13. Поддержка и обратная связь
  14. Свойство Attributes
  15. Синтаксис
  16. Settings
  17. Замечания
  18. См. также
  19. Поддержка и обратная связь
  20. Функция FileAttr
  21. Синтаксис
  22. Возвращаемые значения
  23. Пример
  24. См. также
  25. Поддержка и обратная связь

Объект File. Работа с файлами

Объект File позволяет выполнять различные манипуляции с файлом, например, копировать или удалить файл, а также предоставляет доступ к информации о файле, например, можно получить размер файла или дату и время создания файла. Создать объект позволяет метод GetFile( ) объекта FileSystemObject . В параметре указывается путь к файлу. Путь может быть абсолютным или относительным. При указании относительного пути полный путь определяется с учетом местоположения текущего рабочего каталога и текущего диска. Пример создания объекта:

Открытие файла

Открыть файл позволяет метод OpenAsTextStream() объекта File , который возвращает ссылку на объект TextStream . Формат метода:

Необязательный параметр задает режим открытия файла:

  • ForReading — чтение (значение по умолчанию). Указатель устанавливается на начало файла;
  • ForWriting — запись. Содержимое файла удаляется. Указатель устанавливается на начало файла;
  • ForAppending — добавление. Содержимое файла не удаляется. Указатель устанавливается на конец файла.

В необязательном параметре указываются следующие значения:

  • TristateFalse — 0 — кодировка ASCII (значение по умолчанию);
  • TristateTrue — -1 — кодировка Unicode;
  • TristateUseDefault — -2 — кодировка, используемая в системе по умолчанию.

Пример открытия файла на запись:

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

Проверить существование файла позволяет метод FileExists( ) объекта FileSystemObject . В параметре указывается путь к файлу. Метод возвращает значение True , если файл существует и False — в противном случае. Пример:

Получение информации о файле

Получить информацию о файле позволяют следующие свойства объекта File :

  • Size — размер файла;
  • Path — полный путь к файлу (например, D:VBAfile1.txt );
  • ShortPath — короткий путь к файлу;
  • Drive — имя диска (например, D: );
  • Name — имя файла без пути;
  • ShortName — короткое имя файла;
  • Type — тип файла;
  • ParentFolder — ссылка на объект родительского каталога;
  • DateCreated — дата и время создания файла;
  • DateLastAccessed — дата и время последнего доступа к файлу;
  • DateLastModified — дата и время последнего изменения файла;
  • Attributes — позволяет определить какие атрибуты установлены для файла. Содержит сумму следующих значений:
  • 0 — Normal — обычный файл (только чтение);
  • 1 — ReadOnly — файл доступен только для чтения (чтение и запись);
  • 2 — Hidden — скрытый файл (чтение и запись);
  • 4 — System — системный файл (чтение и запись);
  • 16 — Directory — путь указывает на каталог (только чтение);
  • 32 — Archive — архивный файл (чтение и запись);
  • 64 — Alias — имя файла является псевдонимом (только чтение);
  • 128 — Compressed — сжатый файл (только чтение).

Проверить, установлен атрибут или нет, позволяет оператор And . Если атрибут установлен, то результатом операции будет ненулевое значение. Если этому свойству присвоить новое значение, то атрибуты файла (доступные для записи) будут изменены.

Пример получения и изменения атрибутов файла показан в листинге 13.1.

Листинг 13.1. Получение и изменение атрибутов файла

Манипулирование файлами

Для манипулирования файлами предназначены следующие методы объекта File :

  • Move — позволяет переместить или переименовать файл:

Вместо метода Move() можно воспользоваться методом MoveFile() объекта FileSystemObject . Формат метода:

Пример переименования файла file1.txt в file3.txt :

Параметр может содержать подстановочные знаки в последнем компоненте пути. Например, переместить все текстовые файлы из каталога folder1 в каталог folder2 можно так:

  • Copy [, ] — позволяет скопировать содержимое файла в другой файл. Если во втором параметре указано значение True (значение по умолчанию), то существующий файл будет перезаписан, а если значение False — то генерируется ошибка. Пример:

Вместо метода Copy() можно воспользоваться методом CopyFile() объекта FileSystemObject . Формат метода:

Пример создания копии файла file3.txt :

Параметр может содержать подстановочные знаки в последнем компоненте пути. Например, скопировать все текстовые файлы из каталога folder2 в каталог folder1 можно так:

  • Delete [ ] — удаляет файл. Если в параметре указано значение True , то файл удаляется даже в случае, если он доступен только для чтения. По умолчанию параметр имеет значение False . Пример:

Вместо метода Delete() можно воспользоваться методом DeleteFile() объекта FileSystemObject . Формат метода:

Пример удаления файла file3.txt :

Создание временных файлов

С помощью метода GetTempName() объекта FileSystemObject можно сгенерировать уникальное имя для временного файла. Обратите внимание на то, что метод не создает файл, а лишь возвращает уникальное имя в виде строки (например, «radDA657.tmp «). Пример:

Семейство Files

Семейство Files содержит несколько объектов File . Доступ к объекту в коллекции выполняется с помощью метода Item( ) или с помощью цикла For Each. Next . Получить количество объектов в коллекции позволяет свойство Count .

С помощью свойства Files объекта Folder можно получить ссылку на коллекцию всех файлов в каталоге. В качестве примера выведем названия всех файлов в каталоге:

Статьи по Visual Basic for Applications (VBA)

Помощь сайту

ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов

Источник

Функция Dir

Возвращает значение типа String, определяющее имя файла, каталога или папки, которое соответствует указанному шаблону, атрибуту файла либо метке тома диска.

Синтаксис

Dir [ (pathname, [ attributes ] ) ]

Синтаксис функции Dir состоит из следующих элементов.

Часть Описание
pathname Необязательный. Строковое выражение, указывающее имя файла; может включать каталог или папку, а также диск. Если файл, указанный параметром pathname, не найден, возвращается строка нулевой длины («»).
attributes Необязательный. Константа или числовое выражение, определяющее атрибуты файла. Если этот параметр опущен, возвращаются файлы, которые соответствуют параметру pathname, но не имеют атрибутов.

Параметры

Константа Значение Описание
vbNormal 0 (По умолчанию.) Определяет файлы без атрибутов.
vbReadOnly 1 В дополнение к файлам без атрибутов определяет файлы, доступные только для чтения.
vbHidden 2 Определяет скрытые файлы, а также файлы без атрибутов.
vbSystem 4 В дополнение к файлам без атрибутов определяет системные файлы. Недоступно в macOS.
vbVolume 8 Определяет метку тома; если указан какой-либо другой атрибут, параметр vbVolume игнорируется. Недоступно в macOS.
vbDirectory 16 В дополнение к файлам без атрибутов определяет каталоги (папки).
vbAlias 64 Указанное имя файла является псевдонимом. Доступно только в macOS.

Эти константы определены в Visual Basic для приложений и могут использоваться в коде вместо фактических значений.

Примечания

В Microsoft Windows и macOS Dir поддерживает использование подстановочных знаков с несколькими символами (*) и одним символом (?) для указания нескольких файлов.

Так как macOS не поддерживает использование подстановочных знаков, для определения группы файлов используйте тип файла. Чтобы вместо имен файлов указать тип файла, воспользуйтесь функцией MacID. Например, следующий оператор возвращает имя первого текстового файла в текущей папке:

Чтобы вывести следующий файл в папке, укажите пустую строку:

Если функция MacID используется с функцией Dir в Microsoft Windows, возникает ошибка.

Любое значение атрибута, превышающее 256, считается значением MacID.

Значение pathname необходимо указать при первом вызове функции Dir, иначе произойдет ошибка. Если задаются атрибуты файла, значение pathname также должно быть указано.

Функция Dir возвращает первое имя файла, соответствующее значению pathname. Для получения дополнительных имен файлов, соответствующих значению pathname, вызовите функцию Dir повторно без аргументов. Если других соответствий найдено не будет, функция Dir возвратит пустую строку («»). После возврата строки нулевой длины в последующих вызовах необходимо указывать значение pathname, иначе произойдет ошибка.

Значение pathname можно изменить без получения всех имен файлов, соответствующих текущему значению pathname. Однако нельзя осуществить рекурсивный вызов функции Dir. С помощью функции Dir с атрибутом vbDirectory невозможно последовательно возвращать подкаталоги.

Так как имена файлов возвращаются в порядке без учета регистра для Windows и с учетом регистра для macOS, их можно сохранить в массиве и затем отсортировать массив.

См. также

Поддержка и обратная связь

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.

Источник

Свойство Attributes

Устанавливает или возвращает атрибуты файлов или папок. Доступ для чтения/записи или только для чтения в зависимости от атрибута.

Синтаксис

object. Атрибуты [= newattributes ]

Свойство Attributes состоит из следующих частей:

Part Описание
object Обязательно. Всегда имя объекта File или Folder .
newattributes Необязательный параметр. Если аргумент newattributes предоставляется, он является новым значением атрибутов заданного объекта.

Settings

Аргумент newattributes может иметь любое из следующих значений или любое логическое сочетание следующих значений.

Константа Значение Описание
Normal 0 Обычный файл. Атрибуты не заданы.
ReadOnly 1 Файл только для чтения. Атрибут «чтение/запись».
Hidden 2 Скрытый файл. Атрибут «чтение/запись».
Система 4 Системный файл. Атрибут «чтение/запись».
Volume 8 Метка тома дискового устройства. Атрибут «только чтение».
Directory 16 Папка или каталог. Атрибут «только чтение».
Archive 32 Файл изменен после последнего резервного копирования. Атрибут «чтение/запись».
Alias 1024 Ссылка или ярлык. Атрибут «только чтение».
Сжатого 2048 Сжатый файл. Атрибут «только чтение».

Замечания

В следующем коде показано использование свойства Attributes с файлом.

См. также

Поддержка и обратная связь

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.

Источник

Функция FileAttr

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

Синтаксис

FileAttr(filenumber, returntype)

Синтаксис функции FileAttr включает следующие именованные аргументы:

Part Описание
filenumber Обязательный элемент; Integer. Любой допустимый номер файла.
Returntype Обязательный элемент; Integer. Число, указывающее, какой тип информации возвращает функция. Укажите значение 1, чтобы функция возвращала число, соответствующее файловому режиму. Задайте значение аргумента 2, чтобы получить файловый дескриптор операционной системы (только для 16-битных систем). Значение 2 для аргумента returntype не поддерживается в 32-битных системах и приводит к ошибке.

Возвращаемые значения

Если аргументreturntype равен 1, режим доступа к файлам указывают следующие значения:

Режим Значение
Ввод 1
Вывести 2
Случайных 4
Добавить 8
Binary 32

Пример

В этом примере функция FileAttr используется для возврата режима файла и дескриптора открытого файла. Дескриптор файла возвращается только в 16-разрядных системах; в 32-разрядных системах передача 2 в качестве второго аргумента приводит к ошибке.

См. также

Поддержка и обратная связь

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.

Источник

Содержание

Введение
Работа с дисками и папками, путь
CurDir — текущая папка
ChDrive — смена логического диска
ChDir — смена папки
Dir — список файлов/папок
Name — переименование
MkDir — создание папки
RmDir — удаление папки
Kill — удаление файла
SetAttr — установка атрибутов


Доступ к этим материалам предоставляется только зарегистри­рован­ным пользователям!


Низкоуровневые функции
Идентификатор файла
Open #
Close #
Reset
Чтение и запись (общая сводка и принципы)
Write #
Print #
Spc
Tab #
Width #
Input #
Line Input #
Get #
Put #
Seek #
Примеры
Команды, операторы и функции в алфавитном порядке (низкоуровневые операторы помечены знаком #):
ChDrive,
ChDir,
Close #,
CurDir,
Dir,
FreeFile #,
Get #,
Input #,
Kill,
Line Input #,
MkDir,
Name,
Open #,
Print #,
Put #,
Reset #,
RmDir,
SetAttr,
Seek #,
Spc #,
Tab #,
Width #,
Write #

Одной из важнейших составляющих любого языка программирования является способность считывать и записывать информацию из файлов.
Стандартно это называется функциями низкого уровня (Low Level) и в полном объеме представлено в VBA.
Кстати, именно эта особенность и является основой опасности макросов.

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


Доступ к этим материалам предоставляется только зарегистри­рован­ным пользователям!


P.S.! Завершение переработки материалов разработчика приводит к совершенно неутешительным выводам.
Материала по этой теме всегда было очень мало, да и качество оставляло желать лучшего.
Теперь же он стал «обструганным» под непонятный стандарт, разорванным в несвязанное словоизвержение и напичканным примерами,
половина из которых только запутывает ситуацию, а вторая — ничего не иллюстрирует.
Ну, или почти так.

Работа с файлами, дисками и папками, путь

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

Все, перечисленное здесь, не имеет прямого отношения к низкоуровневым функциям, но без этой информации работать нельзя в принципе.

Первым является вопрос о том, где мы сейчас находимся.
Совсем неочевиден не только ответ, но и то, что сам вопрос будет своевременно задан.
Данный тезис становится все более актуальным с каждым годом и мне не хотелось бы, чтобы мои ученики бились об него лбом.

CurDir

Определение текущей папки.

Синтаксис

CurDir [(диск)]

Из синтаксиса можно понять (или нет) достаточно многое.


Доступ к этим материалам предоставляется только зарегистри­рован­ным пользователям!


Перечисленное не дает однозначного ответа на возникающие вопросы, но является основой для таковых.
Частичные решения есть в разделе Примеры.

ChDrive

Инструкция для смены текущего диска (ChDrive) работает довольно примитивно. Так, вариант

ChDrive «D»

определит текущим диском диск «D:». Из примера видно, что приводится только литерал, без двоеточия.

ChDir

Изменяет текущий каталог или текущую папку

Синтаксис

Chdir <путь>

Внимание! Изменяется текущая папка на указываемом диске, а не сам диск.
Для смены диска потребуется команда ChDrive.

В значении пути можно использовать обозначения относительного перемещения.
Например,


Доступ к этим материалам предоставляется только зарегистри­рован­ным пользователям!


Dir

Функция возвращает строку (String) с именем обнаруженных на диске файла, папки или подпапки.
Если объект файловой системы обнаружен не будет, возвратится пустая строка.

Синтаксис

Dir [(<путь>, [<атрибуты>])]

В имени можно использовать знаки подстановки маски файла (* и ?).

Передача в качестве аргумента пустой строки возвращает список всех файлов и папок.


Доступ к этим материалам предоставляется только зарегистри­рован­ным пользователям!


Атрибуты (копия из справки)

Константа Значение Описание
vbNormal 0 Файлы без атрибутов (Значение по умолчанию.)
vbReadOnly 1 В дополнение к файлам без атрибутов определяет файлы, доступные только для чтения
vbHidden 2 В дополнение к файлам без атрибутов определяет скрытые файлы
vbSystem 4 В дополнение к файлам без атрибутов определяет системные файлы
vbVolume 8 Определяет метку тома, то есть имя логического диска (не букву!). Если указан какой-либо другой атрибут, параметр vbVolume игнорируется
vbDirectory 16 В дополнение к файлам без атрибутов определяет каталоги (папки)

Из контекста описания понятно, что атрибуты могут суммироваться.


Доступ к этим материалам предоставляется только зарегистри­рован­ным пользователям!


Name

Оператор Name переименовывает файл или папку и/или перемещает их в новое место.

Синтаксис

Name <oldpathname> As <newpathname>

При этом

  • Обрабатываются только уже существующие объекты.
  • Файл может быть перемещен на другой диск.
  • Файлы, открытые низкоуровневыми процедурами, надо предварительно закрыть.
  • Перемещение папок и подпапок возможно только в пределах логического диска.

MkDir

Создает новый каталог или папку.

Синтаксис

Mkdir <путь>

Если диск не указан, новые каталог или папка создаются на текущем диске.
Имя присваивается с учетом регистра символов.


Доступ к этим материалам предоставляется только зарегистри­рован­ным пользователям!


RmDir

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

Синтаксис

RmDir <путь>

Невозможно удалить папку, содержащую файлы, так что следует вначале удалить их, используя команду Kill.
Также этой командой нельзя удалить файл.

Kill

Удаляет файлы с диска.

Синтаксис

Kill <путь>

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

В имени можно использовать знаки подстановки маски файла (* и ?).

Так как команда удаляет только файлы, для удаления папок следует воспользоваться командой RmDir.

SetAttr

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

Синтаксис

SetAttr <имя файла>, <атрибуты>

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

Нельзя изменять атрибуты у открытых файлов!

Атрибуты:

Константа Значение Описание
vbNormal 0 Без атрибутов (по умолчанию)
vbReadOnly 1 Только для чтения (Read-only)
vbHidden 2 Скрытый файл (Hidden)
vbSystem 4 Системный файл (System)
vbArchive 32 Файл изменен после последнего резервного копирования

Атрибуты при указании могут суммироваться.


Доступ к этим материалам предоставляется только зарегистри­рован­ным пользователям!


Низкоуровневые функции

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

Идентификатор файла

Основным моментом для работы с обсуждаемым функционалом является то, что каждому файлу, над которым производятся действия, обязан быть присвоен целочисленный идентификатор (FileNumber) типа Byte.
Таким образом, может быть открыто до 511 файлов (1–511). По умолчанию используется лишь 255.
Все обращения к файлам (чтение и запись) производятся только(!) через идентификатор, предваряемый знаком диеза, например, #1.

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

FreeFile [(RangeNumber)]

где RangeNumber — 0 (1–255) или 2 (256–511).

Простейший вариант обращения (запроса) к функции выглядит так:

MyFileNum = FreeFile

Далее по тексту будет использоваться именно выделенная красным переменная, содержащая получаемый ID (для упрощения записи).
Если не будет заявлено другое или использовано явное указание.

И еще раз, для более четкого понимания. В небольших проектах и программах будет более чем оправдано непосредственное указание идентификатора в командах: #1, #2…

Команда Open #

Открывает файл для операций ввода/вывода (input/output, I/O).

Синтаксис

Open <имя файла> For <mode> [Access <вид доступа>] [<lock>] As [#]FileNumber [Len = <RecLength>]

Здесь имя файла определяет имя, которое может содержать путь;
mode указывает режим открытия файла: Append (добавление), Binary (двоичный), Input (чтение), Output (запись) либо Random (случайный) (см. ниже);
Access определяет вид доступа: Read (чтение), Write (запись), Read Write (чтение и запись);
lock ключевое слово, определяющее доступность файла для других процессов: Shared, Lock Read, Lock Write или Lock Read Write;
[#]FileNumber заменяется на числовой идентификатор файла, используемый для последующей работы функций.
Len определяет размер записи (≤32767 (байт)), необходимый для внесения информации в файл с помощью Put #.

Если указываемый на запись файл отсутствует, то он будет создан.
Естественно, попытка чтения несуществующего файла закончится ошибкой (см. Dir).

Описание команды упрощено!

Команда Close #

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

Close [FileNumberList]

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

Примеры

	Close ' Закрыть все открытые файлы
	Close #1 ' Закрыть файл с идентификатором #1
	Close #1, #7 ' Закрыть два файла (с идентификаторами #1 и #7)
	Close #ProjID ' Закрыть файл с идентификатором, сохраненным в переменной памяти ProjID

См. также Reset.

Reset

Закрывает все файлы, открытые с помощью оператора Open, записывая содержимое их буферов на диск.

По существу, дублирует команду Close без атрибутов.

Чтение и запись

Как уже сказано выше, команда Open # позволяет открыть файл для использования в разных режимах, которые можно разделить на три группы.

  • Последовательный (Sequential) доступ (режимы Input, Output и Append) используется для записи в текстовые файлы, например, журналы ошибок и отчеты.
  • Прямой или произвольный доступ (Random) используется для считывания и записи данных в файле без его закрытия.
    Файлы с прямым доступом сохраняются данные в записях, что ускоряет нахождение требуемой информации.
  • Двоичный доступ (режим Binary) используется для считывания или записи любого байта в файле, например, при сохранении или отображении растрового рисунка.

Сводка стандартных операторов, используемых для чтения и записи в разных режимах.

Тип доступа Запись данных Чтение данных
Последовательный (Sequential) Print #, Write # Input #
Произвольный (Random) Put Get
Двоичный (Binary) Put Get

Write #

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

Синтаксис

Write #FileNumber, [OutputList]

Необязательный параметр OutputList представляет одно или несколько числовых, или строковых выражений через запятую, которые нужно записать в файл.
В переводе на обыденный язык, каждая строка подобного результирующего файла является перечнем значений с разделителем, каждое из которых записано по строгим правилам.
Фактически мы получаем известный большинству CSV-файл.
Чтобы не возникало неожиданностей при считывании, следует очень четко придерживаться правил.

Отсутствие OutputList (запятая в команде остается!) приводит к записи пустой строки.

Некоторые важные правила и особенности:

  • В качестве разделителя в outputlist можно использовать пробел, точку с запятой или запятую.
    По очень многим соображениям настоятельно рекомендую использовать только точку с запятой.
  • Числовые данные всегда записываются с помощью точки в качестве разделителя целой и дробной части.
  • Вся информация записывается в особом виде, зависящем от типа данных и знание об этом создает довольно серьезную путаницу.
    Важно четко разделить информацию и понимать, что OutputList записывается в формате VBA.
    Никакие последующие «причуды форматирования» нас не касаются.
    Знать их нужно, чтобы находить и исправлять ошибки, либо для вывода информации, условно говоря, вручную.
    То есть без помощи, которую нам предоставляет функция Write #.
  • Из предыдущего тезиса неизбежно вытекает, что некоторые данные проще выводить, предварительно записав их значение в переменную.
    Например, дату или код ошибки.
    Естественным образом это складывается для информации, получаемой посредством вычислений.
  • Сохранение (запись) данных:
      Строка — заключается в кавычки
      Число — цифры без кавычек
      Логические — #FALSE# и #TRUE#
      Null — #FALSE# и #TRUE#
      Дата — в универсальном формате даты
      Ошибка — #ERROR ErrorCode#, где ErrorCode является соответствующим номером
  • Нельзя использовать строки, уже содержащие в себе кавычки.
  • В конец файла (после записи последнего символа) будет вставлен символ новой строки (Chr(13) + Chr(10)).

Примеры (все данные записываются в ранее открытый файл с идентификатором #1)

   Write #1, 'Запись пустой строки
   Write #1, False; True 'Запись истинного и ложного значений
   Write #1, Tr(1); Tr(2); Tr(3) 'Запись значений трех последовательных элементов массива
   Write #1, Now; 128; True; "Текст"; MyVar 'Запись разнородных значений

Данные, записанные с помощью Write #, обычно считываются из файла с помощью оператора Input #.
Именно во взаимодействии этой пары и заключен весь смысл.

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

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

Print #

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

Синтаксис

Print #FileNumber, [OutputList]

OutputList — выражение или список выражений, которые необходимо вывести.

Его синтаксис

[{Spc(n) | Tab [(n)]}] [выражение] [позиция]

См. Spc #, Tab #, а также Width #.
Выражение может быть числовым или строковым, «позиция» определяет столбец, где будет начало вывода.

С учетом специфического применения оператора, детали его действия опущены.

Spc

Функция используется с оператором Print # или методом Print для позиционирования выходных данных. Аналог Space().

Синтаксис

Spc(n)

Параметр n указывает, сколько пробелов будет возвращено. При переполнении строки, излишек переходит на следующую.

Если не умничать, то функция будет работать только с моноширинным шрифтом.

Пример

	Print #1, "Последующий текст начнется через 10 пробелов"; Spc(10); "вот он!"

Tab #

Используется с оператором Print # или методом Print для позиционирования выходных данных.

Синтаксис

Tab[(n)]

Вставляет табулятор. Если параметр не указан, печать смещается к следующей позиции (шаг равен 14 символам).
Наличие параметра перемещает к позиции с указанным номером. А если она уже была, то на эту позицию, но следующей строки.

Ширина (длина строки) определяется значением Width #.

Width #

Оператор Width # назначает ширину строки вывода для файла, открытого с помощью оператора Open #.

Синтаксис

Width #FileNumber, width

Если значение width равно 0, длина строки является неограниченной. Оно используется по умолчанию.

Input #

Читает строку со структурированными данными из открытого последовательного файла и сохраняет эти данные в переменных.

Синтаксис

Input #FileNumber, VarList

Обычно данная инструкция считывает файлы, созданные посредством Write #.
Использовать ее следует только с файлами, открытыми в режиме Input или Binary.

Параметр VarList представляет собой перечисленный список переменных, в которые сохраняются считываемые данные.

Примеры

	Input #2, Var1, Var2, Var3

Line Input #

Считывает одну строку из открытого последовательного файла и присваивает ее переменной типа String или Variant.

Синтаксис

Line Input #FileNumber, VarName

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

Get #

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

Синтаксис

Get [#]FileNumber, [RecNumber], VarName

Необязательный параметр RecNumber типа Variant (Long) указывает на номер записи (для файлов, открытых в режиме Random)
или байтовое число (для файлов, открытых в режиме Binary), с которого начинается считывание. При его отсутствии, запятая сохраняется
Результат сохраняется в переменную VarName.

Длинное и глупое описание работы функции можно свести к следующему.

  1. Читаем описание Put #.
  2. Если вы не знаете длину записи (Len), то не сможете правильно открыть файл и, как следствие, правильно прочитать его.
    Единственным адекватным выходом будет анализ исходного файла «глазами».

Данные, для считывания с помощью Get, обычно записываются в файл с помощью Put #.

Примеры

	Get #4,,BufferVar

Put #

Записывает данные из переменной в файл на диске.

Синтаксис

Put [#]FileNumber, [RecNumber], VarName

Необязательный параметр RecNumber типа Variant (Long) указывает на номер записи (для файлов, открытых в режиме Random)
или байтовое число (для файлов, открытых в режиме Binary), с которого начинается запись.
Если его не использовать, то производится запись следующего номера, после последнего, определенного обращением к любому из операторов
Get #, Put или Seek #.

Особенности для файлов, открытых в режиме Random:

  1. Параметр Len, задаваемый при открытии файла, играет ключевую роль.
    Во-первых, длина записи не может его превышать.
    Во-вторых, если запись меньше, то она дополняется пробелами до размера Len.
  2. Если записываемая переменная является строкой переменной длины, оператор Put записывает 2-байтовый дескриптор c длиной строки, а затем переменную.
    То есть длина записи, указанная предложением Len в операторе Open, должна быть по крайней мере на 2 больше, чем фактическая длина строки записываемых данных.
  3. Если записываемая переменная имеет числовой подтип Variant, оператор Put записывает дополнительно 2 байта, указывающие на тип. См. п.2.
  4. Если записываемая переменная имеет строковый подтип Variant, оператор Put записывает дополнительно 2 байта, указывающие на тип и еще 2 — на длину.
    Соответственно, значение Len должно быть увеличено на 4.
  5. Если записываемая переменная является динамическим массивом пользовательского типа, Put записывает дескриптор, длина которого равна 2 плюс в 8 раз больше числа измерений,
    то есть 2 + 8 * число измерений. То есть, для одномерного массива — 10 (2+8*1), для двумерного — 18 (2+8*2) и т.д.
    Плюс размер массива, описать который нормально сотрудники Microsoft не удосужились.
  6. Если записываемая переменная является массивом фиксированного размера, оператор Put записывает только данные, без дескриптора.
  7. При любом другом типе переменной все также, как и в п.6.

Особенности для файлов, открытых в режиме Binary (в дополнение к особенностям Random):

  • Параметр Len, задаваемый при открытии, не действует. Значения переменных записываются последовательно, без заполнителя.
  • Для любого другого массива, чем массив типа, определяемого пользователем, оператор Put записывает только данные, без дескриптора.
  • Оператор Put записывает строки переменной длины, не являющиеся элементами типов, определяемых пользователем, с числом байтов равных числу знаков в строке.

Данные, записанные с помощью Put, обычно считываются из файла с помощью Get #.

Seek #

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

Синтаксис

Seek [#]FileNumber, position

Параметр position указывает начальную точку чтения и должен располагаться в диапазоне 1—2 147 483 647.

Его работа тесно связана с использованием Get # и Put #.

По существу, оператор назван неудачно, так как ничего не ищет, а просто перемещается по команде.

Примеры

Содержание
Создание файла
Проверка существования файла
Запись информации в новый файл
Добавление информации в существующий файл
Построчное считывание файла
Назначение текущей папки

Здесь не стоит разговаривать о микроскопических программах, хотя из приводимых примеров можно извлекать блоки и использовать их в качестве заготовок.

Также не будет полноценных примеров для бездумного копирования.

Многие ситуации содержат схожие требования, но идеальное решение должно состоять из множества функций.
Сейчас их делать не очень хочется, но это запланировано в перспективе.

В любом случае, все примеры полностью работоспособны.

Принципиально важен факт документирования функции с точки зрения возвращаемых значений.
Равно как и описание передаваемых параметров.

Для большинства представляемых примеров используются следующие положения, если не указано иное.

  • Путь должен содержать литерал диска (C:…).
  • Путь не должен заканчиваться косой чертой: «C:ab».
  • Если путь и файл передаются отдельно, то имя файла не должно содержать пути.
  • Все параметры являются обязательными и не могут быть пустыми. Последнее обстоятельство не проверяется.

Создание файла

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


Доступ к этим материалам предоставляется только зарегистри­рован­ным пользователям!


Ещё один момент. Добавим программу (фрагмент), которая будет запускать процесс.


Доступ к этим материалам предоставляется только зарегистри­рован­ным пользователям!


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

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


Доступ к этим материалам предоставляется только зарегистри­рован­ным пользователям!


Запись информации в новый файл

Разумеется, что в этой ситуации файл нужно не открыть, а создать.


Доступ к этим материалам предоставляется только зарегистри­рован­ным пользователям!


….

Добавление информации в существующий файл

Казалось бы…
Но первым действием должна быть проверка его наличия, если это не было сделано в программе ранее.


Доступ к этим материалам предоставляется только зарегистри­рован­ным пользователям!


….

Построчное считывание файла


Доступ к этим материалам предоставляется только зарегистри­рован­ным пользователям!


….

Назначение текущей папки

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

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


Доступ к размещенным в этом месте материалам ограничен и предоставляется следующим категориям:
1. Студент I/II курса ВХК РАН. 2. Бывший студент ВХК РАН. 3. Подготовка к ОГЭ. 4. Подготовка к ЕГЭ. 5. VIP-пользователь. 6. Благотворитель.


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

Начиная с первых версий VBA, файлы обрабатывались с помощью оператора Open и других файловых операторов и функций. Эти механизмы со временем будут вытеснены объектной моделью FSO (File System Object), но они полностью поддерживаются в версии 5.0.

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

Последовательный доступ, обычно используемый для записи текстовых файлов, например протоколов ошибок или отчетов.

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

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

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

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

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

Для работы с папками и дисками:

Функция Dir возвращает значение типа String, представляющее имя файла, каталога или папки, которое удовлетворяет указанному шаблону имени файла, набору атрибутов файла или метке тома на диске.

Dir[(путь[, атрибуты])]

Здесь путь (Необязательный) — строковое выражение, указывающее имя файла; может содержать имя каталога или папки и диска. Если путь не найден, возвращается пустая строка («»). Атрибуты (Необязательный) — константа или числовое выражение, описывающее атрибуты файла. Если этот аргумент опущен, возвращаются все файлы, имена которых удовлетворяют аргументу путь.

Функция Dir поддерживает использование подстановочных знаков для нескольких символов (*) и для одиночного символа (?) для указания нескольких файлов.

При первом вызове функции Dir необходимо указать путь, в противном случае возникает ошибка. Если указаны атрибуты файла, наличие аргумента путь является обязательным.

Функция Dir возвращает первое имя файла, имя которого удовлетворяет аргументу путь. Для получения остальных файлов, имена которых удовлетворяют указанному пути, следует повторно вызвать функцию Dir без аргументов. Если файлов, имена которых удовлетворяют указанному пути, не осталось, возвращается пустая строка («»). При следующем после возврата пустой строки вызове функции необходимо указать аргумент путь; в противном случае возникает ошибка. Изменить значение аргумента путь можно в любой момент, не дожидаясь, пока закончатся файлы, имена которых удовлетворяют текущему пути. Рекурсивный вызов функции Dir запрещен. Вызов функции Dir с атрибутом vbDirectory не приводит к последовательному возврату подкаталогов.

Поскольку имена файлов возвращаются в произвольном порядке, их можно сохранить в массиве, а затем отсортировать этот массив.

Пример: ‘ Возвращает список каталогов на диске C:.

MyPath = "c:"	' Указывает путь.
MyName = Dir(MyPath, vbDirectory)	' Возвращает первый элемент.
Do While MyName <> ""	' Начинает цикл.
' Игнорирует текущий каталог и каталог предыдущего уровня.
If MyName <> "." And MyName <> ".." Then
' является ли MyName каталогом.
If (GetAttr(MyPath & MyName) And vbDirectory) = vbDirectory Then
Debug.Print MyName	' Выводит элемент если это каталог
End If	.
End If
MyName = Dir	' Возвращает следующий элемент.
Loop

Инструкция ChDir — Изменяет текущий каталог или папку.

ChDir путь

Обязательный аргумент путь является строковым выражением, определяющим какой каталог (или папка) станет текущим. Аргумент путь может содержать имя диска. Если диск не указан, инструкция ChDir изменяет текущий каталог или папку на текущем диске.

Инструкция ChDir изменяет текущий каталог, но не изменяет стандартный диск. Например, если стандартным является диск C, то после выполнения следующей инструкции стандартным каталогом станет каталог на диске D, но стандартным диском останется диск C:

ChDir «D:TMP»

Функция CurDir — Возвращает значение типа Variant (String), представляющее текущий путь.

CurDir[(диск)]

Необязательный аргумент диск является строковым выражением, указывающим существующий диск. Если диск не указан или аргумент диск является пустой строкой («»), функция CurDir возвращает путь к текущему диску.

Инструкция MkDir — Создает новый каталог или папку.

MkDir путь

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

Инструкция RmDir — Удаляет существующий каталог или папку.

RmDir путь

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

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

Инструкция ChDrive — Изменяет текущий диск.

ChDrive диск

Обязательный аргумент диск является строковым выражением, указывающим существующий диск. Если этот аргумент задается пустой строкой («»), текущий диск не изменится. Если диск является строкой, состоящей из нескольких символов, инструкция ChDrive использует только первый символ.

Для работы со свойствами файлов:

Функция FileDateTime — Возвращает значение типа Variant (Date), содержащее дату и время создания или последнего изменения файла.

FileDateTime(путь)

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

Функция FileLen — Возвращает значение типа Long, содержащее размер файла в байтах.

FileLen(путь)

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

Если в момент вызова функции FileLen указанный файл открыт, возвращается размер этого файла до его открытия. Для определения размера открытого файла следует использовать функцию LOF.

Функция GetAttr — возвращает значение типа Integer, содержащее атрибуты файла, каталога или папки.

GetAttr(путь)

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

Значение, возвращаемое функцией GetAttr, являются суммой следующих значений:

vbNormal 0 Обычный.

vbReadOnly 1 Только чтение.

vbHidden 2 Скрытый.

vbSystem 4 Системный.

vbDirectory 16 Каталог или папка.

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

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

Result = GetAttr(FName) And vbArchive

Если архивный атрибут установлен, будет возвращено ненулевое значение.

Инструкция SetAttr — задает атрибуты файла.

SetAttr pathname, attributes

Здесь pathname (Обязательный) — строковое выражение, указывающее имя файла; может содержать имя каталога или папки и диска.

attributes (Обязательный) — константа или числовое выражение, задающее атрибуты файла.

Ниже приведены допустимые значения аргумента attributes:

vbNormal 0 Обычный (по умолчанию).

vbReadOnly 1 Только чтение.

vbHidden 2 Скрытый.

VbSystem 4 Системный.

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

При попытке изменения атрибутов открытого файла возникает ошибка выполнения.

Для манипулирования файлами:

Инструкция FileCopy — Копирует файл.

FileCopy source, destination

Здесь source (Обязательный) — строковое выражение, указывающее имя файла, подлежащего копированию. Аргумент source может содержать имя каталога или папки и диска.

destination (Обязательный) — строковое выражение, указывающее имя результирующего файла. Аргумент destination может содержать имя каталога или папки и диска.

При попытке скопировать открытый файл с помощью инструкции FileCopy возникает ошибка.

Инструкция Name — Изменяет имя файла, каталога или папки.

Name староеИмя As новоеИмя

Здесь староеИмя (Обязательный) — строковое выражение, указывающее имя и положение существующего файла; может содержать имя каталога или папки и диска.

новоеИмя (Обязательный) — строковое выражение, указывающее новое имя и положение файла; может содержать имя каталога или папки и диска. Файл с таким именем не должен существовать.

Оба аргумента, новоеИмя и староеИмя, должны указывать на один и тот же диск. Если путь, указанный с помощью аргумента новоеИмя существует и отличен от указанного с помощью аргумента староеИмя, инструкция Name переместит файл в новый каталог или папку и переименует его (если требуется). Если пути, указанные с помощью аргументов новоеИмя и староеИмя, разные, а имена файлов совпадают, инструкция Name переместит файл в новый каталог или папку без изменения его имени. С помощью инструкции Name, можно переместить файл из одного каталога (или папки) в другой, однако нельзя переместить каталог или папку.

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

Инструкция Kill — удаляет файлы с диска.

Kill путь

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

Инструкция Kill поддерживает использование подстановочных знаков для нескольких символов (*) и для одиночного символа (?) для указания нескольких файлов.

При попытке удалить открытый файл с помощью инструкции Kill возникает ошибка. Для удаления каталогов следует использовать инструкцию RmDir.

Для управления файлами:

Инструкция Open — разрешает выполнение с файлом операций ввода/вывода.

Open путь For режим [Access доступ] [блокировка] As [#]номерФайла [Len=длина]

Здесь путь (Обязательный) — строковое выражение, указывающее имя файла; может содержать имя каталога или папки и имя диска.

режим (Обязательный) — ключевое слово, указывающее режим файла: Append, Binary, Input, Output или Random. По умолчанию, файл открывается в режиме Random.

доступ (Необязательный) — ключевое слово, указывающее операции, разрешенные с открытым файлом: Read, Write или Read Write.

блокировка (Необязательный) — ключевое слово, указывающее операции, разрешенные с открытым файлом другим процессам: Shared, Lock Read, Lock Write и Lock Read Write.

номерФайла (Обязательный) — допустимый номер файла в интервале от 1 до 511 включительно. Для определения следующего свободного номера файла следует использовать функцию FreeFile.

длина (Необязательный) — Число, меньшее либо равное 32 767 (байт). Для файлов, открытых в режиме Random, это значение является длиной записи. Для файлов с последовательным доступом это значение является числом буферизуемых символов.

Чтобы получить возможность выполнить любую операцию ввода/вывода, файл необходимо открыть. Инструкция Open резервирует буфер ввода/вывода для файла и определяет режим использования этого буфера.

Если аргумент путь описывает несуществующий файл, такой файл будет создан при открытии в режиме Append, Binary, Output или Random.

Если файл уже открыт другим процессом и указанный режим доступа не разрешен, инструкция Open не будет выполнена и возникнет ошибка.

Если аргумент режим имеет значение Binary, предложение Len игнорируется.

В режимах Binary, Input и Random можно еще раз открыть уже открытый файл под другим номером, не закрывая его. В режиме Append и Output необходимо закрыть файл, чтобы получить возможность открыть его еще раз под другим номером.

Функция FreeFile — Возвращает значение типа Integer, представляющее следующий номер файла, доступный для использования с инструкцией Open.

FreeFile[(диапазонНомеров)]

Необязательный аргумент диапазонНомеров является выражением типа Variant, указывающим диапазон, из которого возвращается следующий свободный номер файла. Значение 0 (используется по умолчанию) задает возвращение номера файла из диапазона 1 — 255 включительно. Значение 1 задает возвращение номера файла из диапазона 256 — 511.

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

Инструкция Close — завершает операции ввода/вывода с файлом, открытым с помощью инструкции Open.

Close [списокНомеровФайлов]

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

[[#]номерФайла] [, [#]номерФайла] . . .

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

При закрытии файла, открытого в режиме Output или Append, в него добавляется содержимое последнего буфера вывода. Все буферы, связанные с закрытым файлом, освобождаются.

Инструкция Close разрывает связь между файлом и соответствовавшим ему номером файла.

Инструкция Reset — Закрывает все файлы, открытые с помощью инструкции Open.

Reset

Инструкция Reset закрывает все активные файлы, открытые с помощью инструкции Open, и записывает содержимое всех буферов файлов на диск.

Для позиционирования в открытом файле:

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

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

Обязательный аргумент номерФайла является выражением типа Integer, содержащим допустимый номер файла.

Функция Seek возвращает значение в интервале от 1 до 2 147 483 647 (т.е. 2^31 — 1) включительно.

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

Random Номер записи, которая будет считана или записана следующей.

Binary, Output, Append, Input Номер байта, с которого начинается выполнение следующей операции ввода/вывода. Первому байту файла соответствует 1, второму 2 и т.п.

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

EOF(номерФайла)

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

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

Функция EOF возвращает значение False до тех пор, пока не будет достигнут конец файла. При использовании с файлами, открытыми в режиме Random или Binary, функция EOF возвращает значение True, если последней выполненной инструкции Get не удалось считать целую запись; в противном случае возвращается значение False.

Для файлов, открытых для доступа в режиме Binary, попытка чтения файла с помощью функции Input до возвращения функцией EOF значения True приводит к ошибке. При чтении двоичных файлов с помощью функции Input следует вместо функции EOF использовать функции LOF и Loc или использовать с функцией EOF инструкцию Get.

Ввод/вывод в файлы различных типов доступа.

Последовательный доступ к файлам:

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

Файлы, открытые для последовательного доступа, допускают следующие операции:

ввод символов в файл (Input);

вывод символов из файла (Output);

добавление символов в файл (Append).

Чтобы открыть файл для последовательного доступа, следует использовать оператор Open:

Open pathname For [Input | Output | Append] As filenum [Len = Buffersize]

Когда последовательный файл открывается для ввода (Input), файл должен существовать, иначе возникнет ошибка. Однако при попытке открыть несуществующий файл для операций вывода (Output) или добавления (Append) оператор Open сначала создает файл, а затем открывает его. Номер файла filenum является обязательным и может быть получен с помощью функции FreeFile. Необязательный параметр Len задает число символов в буфере для операций копирования данных из файла в приложение. Чем больше буфер, тем реже производятся обращения к диску. После открытия файла для операций Input, Output или Append его надо закрыть с помощью оператора Close, прежде чем открывать для операции другого типа.

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

Dim Lines As String, NextLine As String

Do Until EOF (FileNum)

Line Input # FileNum, NextLine

Lines = Lines + NextLine + Chr(13) + Chr(10)

Loop

Оператор Line Input # распознает последовательность символов CR/LF, но не включает их в переменную. О сохранении этих символов должен позаботиться программист.

Можно также использовать оператор Input #, который читает числа и/или строковые выражения, записанные в файл. Например, для чтения строки адреса можно использовать следующий оператор:

Input # FileNum, name, street, city, zip, country

Можно использовать функцию Input () для копирования любого числа символов из файла в переменную при условии, что они могут поместиться в этой переменной:

Lines = Input (n, FileNum)

Чтобы скопировать целый файл в переменную, следует использовать функцию InputB. Так как она возвращает строку в коде ANSI, для преобразования ее в строку UNICODE надо применять функцию StrConv:

Lines = StrConv(InputB(LOF(FileNum), FileNum), vbUnicode)

Для записи строк в файл следует открыть его для последовательного вывода (Output) или добавления (Append), а затем использовать оператор Print #, например:

Print #FileNum, Text

Существует также оператор Write #, который записывает список чисел и/или строковых выражений в файл. Он автоматически отделяет каждое выражение запятой и заключает строковые выражения в кавычки:

AnyString = «AnyChars» : AnyNum = 12345

Write #FileNim, AnyString, AnyNum

Результат будет выглядеть так:

«AnyChars»,12345

Рассмотрим более полный пример, в котором читается текстовый файл, ищутся строки, начинающиеся с одинаковой буквы, и выводятся в другой текстовый файл:

Sub пример12()
Dim first() As String, s() As String
Dim n As Integer, i As Integer, k As Integer
Dim fn As Integer, x As String
i = 1: k = 0
fn = FreeFile
Open "D:input.txt" For Input As fn
Do While Not EOF(fn)
ReDim Preserve s(1 To i)
ReDim Preserve first(1 To i)
Line Input #fn, s(i)
first(i) = Left(s(i), 1)
i = i + 1
Loop
Close #fn
i = i - 1
fn = FreeFile
Open "D:output.txt" For Output As fn
For n = 1 To i
If n <> i Then
For k = n + 1 To i
If first(k) = first(n) Then
Print #fn, s(n), s(k)
End If
Next k
End If
Next n
Close #fn
End Sub

Произвольный доступ к файлам:

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

Type Worker

LastName As String * 10

Title As String * 7

Rank As String * 2

End Type

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

‘Переменная записей

Public Employee As Worker

‘Текущая запись

Public Position As Long

‘Номер последней записи в файле

Public LastRecord As Long

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

Open pathname [ For Random] As filenumber Len = reclength

Так как типом доступа по умолчанию является произвольный (random), ключевые слова For Random не обязательны.

Выражение Len = reclength задает размер каждой записи в байтах. Заметим, что каждая строковая переменная в VBA хранится в формате Unicode, и надо задать длину этой строки. Если reclength меньше, чем действительная длина записываемой в файл записи, генерируется ошибка. Если reclength больше действительной длины записи, то запись сохраняется, но дисковое пространство при этом будет расходоваться нерационально.

Для открытия файла можно использовать следующий код:

Dim FileNum As Integer, RecLength As Long, Employee As Person

‘ Вычисляем длину каждой записи.

RecLength = LenB (Employee)

‘ Получаем следующий доступный номер файла.

FileNum = FreeFile

‘ Открываем новый файл оператором Open.

Open «MYFILR.FIL» For Random As FileNum Len = RecLength

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

Для копирования записей в переменные следует использовать оператор Get. Например, чтобы скопировать запись из файла Employee Records в переменную Employee, можно использовать следующий код:

Get FileNum, Position, Employee

В этой строке Employee содержит номер, который оператор Open использовал для открытия файла; Position содержит номер записи, которая копируется; переменная Employee, объявленная с определенным пользователем типом Worker, получает содержимое записи.

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

Put # FileNum, Position, Employee

Этот код заменит запись с номером, заданным переменной Position, данными из переменной Employee.

Чтобы добавить новые записи в конец файла, открытого для произвольного доступа, следует использовать оператор Put, показанный в предыдущем фрагменте кода. Для этого надо установить значение переменной , Position равным на единицу больше номера последней записи в файле. Например, чтобы добавить новую запись в файл, содержащий пять записей, следует установить переменную Position равной 6.

Следующий оператор добавляет запись в конец файла:

LastRecord = LastRecord + 1

Put #FileNum, LastRecord, Employee

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

Чтобы удалить запись в файле произвольного доступа, следует:

1. Создать новый файл.

2. Скопировать все необходимые из исходного файла в этот новый файл.

3. Закрыть исходный файл и с помощью оператора Kill удалить его.

4. С помощью оператора Name переименовать новый файл, дав ему имя исходного файла.

Доступ к двоичным файлам:

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

Чтобы открыть файл для двоичного доступа, используют следующий синтаксис Open:

Open pathname For Binary As filename

Отличие от оператора для произвольного доступа заключается в отсутствии указания длины записи с помощью предложения Len = RecLength. Будучи включено в оператор открытия двоичного файла, оно просто игнорируется, поскольку предполагается, что записи имеют произвольную длину. Отсюда следует, что невозможно организовать доступ к записям в произвольном порядке, а только последовательно, определяя длину каждой записи. В то же время можно непосредственно обращаться к каждому байту в файле.

Свойства файла: вывод информации о файле, доступной для просмотра через контекстное меню любого файла (кнопка «Свойства»), из кода VBA Excel.

Вывод информации о файле

В контекстном меню любого файла есть кнопка «Свойства», при нажатии которой открывается окно с информацией о файле. Эта информация может быть выведена для просмотра с помощью кода VBA Excel.

Получение свойств любого файла программным способом на примере файла "Схема Белоусова.png", расположенного в папке "C:UsersEvgeniyDownloads":

Sub FileInfo()

Dim ns As Object, i As Integer, n As Integer

Set ns = CreateObject(«Shell.Application»).Namespace(«C:UsersEvgeniyDownloads»)

    For i = 0 To 303

        If ns.GetDetailsOf(ns.ParseName(«Схема Белоусова.png«), i) <> «» Then

            n = n + 1

            Cells(n, 1) = ns.GetDetailsOf(«Схема Белоусова.png«, i) & « = » & ns.GetDetailsOf(ns.ParseName(«Схема Белоусова.png«), i)

        End If

    Next

Set ns = Nothing

End Sub

Если убрать из кода условие, будут отображены все свойства файла, включая свойства без значений. Общее количество свойств — 304.


Выражение

CreateObject(«Shell.Application»).Namespace(«C:UsersEvgeniyDownloads«)

возвращает ссылку на объект Folder для указанной папки («C:UsersEvgeniyDownloads»).


Выражение

ns.GetDetailsOf(«Схема Белоусова.png», i)

возвращает наименование свойства указанного файла («Схема Белоусова.png») под номером i.


Выражение

ns.GetDetailsOf(ns.ParseName(«Схема Белоусова.png»), i)

возвращает значение свойства указанного файла («Схема Белоусова.png») под номером i.

Ширина и высота изображения

Извлечение отдельных свойств файла рассмотрим на примере ширины и высоты изображения. Вывести значение свойства можно по его наименованию или порядковому номеру (индексу).

Определяем индексы ширины и высоты в списке свойств изображения:

Sub TestWidthHeight()

Dim ns As Object, i As Integer

Set ns = CreateObject(«Shell.Application»).Namespace(«C:UsersEvgeniyDownloads»)

    For i = 0 To 303

        If ns.GetDetailsOf(«Схема Белоусова.png«, i) = «Ширина» Or ns.GetDetailsOf(«Схема Белоусова.png«, i) = «Высота» Then

            Debug.Print ns.GetDetailsOf(«Схема Белоусова.png«, i) & « = » & ns.GetDetailsOf(ns.ParseName(«Схема Белоусова.png«), i) & «, Id = « & i

        End If

    Next

Set ns = Nothing

End Sub

Результат работы кода:

Чтобы можно было присвоить значения ширины и высоты числовым переменным, необходимо убрать непечатные символы перед числами и отбросить текстовые части:

Sub ImageWidthHeight()

Dim ns As Object, myWidth As Integer, myHeight As Integer

Set ns = CreateObject(«Shell.Application»).Namespace(«C:UsersEvgeniyDownloads»)

    myWidth = Val(Mid(ns.GetDetailsOf(ns.ParseName(«Схема Белоусова.png«), 167), 2))

    myHeight = Val(Mid(ns.GetDetailsOf(ns.ParseName(«Схема Белоусова.png«), 169), 2))

Set ns = Nothing

    Debug.Print myWidth

    Debug.Print myHeight

End Sub

Применение свойств файла

Представленный ниже код VBA Excel выполняет следующие операции:

  • присваивает числовым переменным myWidth и myHeight значения ширины и высоты, извлеченные из информации о файле изображения;
  • задает ширине и высоте фигуры на рабочем листе размеры изображения;
  • добавляет фигуре ссылку на фоновое изображение.

Sub Primer()

Dim ns As Object, myWidth As Integer, myHeight As Integer

    Set ns = CreateObject(«Shell.Application»).Namespace(«C:UsersEvgeniyDownloads»)

        myWidth = Val(Mid(ns.GetDetailsOf(ns.ParseName(«Схема Белоусова.png«), 167), 2))

        myHeight = Val(Mid(ns.GetDetailsOf(ns.ParseName(«Схема Белоусова.png«), 169), 2))

    Set ns = Nothing

Dim myShap As Shape

Set myShap = ActiveSheet.Shapes(«Блоксхема: процесс 9«)

    With myShap

        .Width = myWidth

        .Height = myHeight

        .Fill.UserPicture «C:UsersEvgeniyDownloadsСхема Белоусова.png«

    End With

End Sub


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


GetAttr

GetAttr(Pathname)

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

Возвращаемое значение

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

Параметры

Pathname
Обязательный параметр-строковое выражение,указывающее имя файла.Pathname может содержать имя каталога или папки и диска,включая сетевые.Он может также задаваться как UNC-имя.Если диск и папка не указана,то система считает,что файл находится в рабочем каталоге на рабочем диске машины.При этом имя файла задается как «C:Test.txt(без обратной косой черты)

Значение, возвращаемое функцией GetAttr, являются суммой значений следующих атрибутов:

Константа Значение Описание
vbNormal 0 Обычный
vbReadOnly 1 Доступен только для чтения
vbHidden 2 Скрытый
vbSystem 4 Системный файл
vbDirectory 16 Каталог или папка
vbArchive 32 Файл был изменен после последнего резервирования

Примечание:При отсутствии файла генерируется ошибка времени исполнения File not found

Пример

' В данном примере функция GetAttr
' используется для определения атрибутов файла,
' а также каталога или папки
Dim MyAttr
' Предположим, что файл TESTFILE имеет атрибут "скрытый"
MyAttr = GetAttr("TESTFILE") ' возвращает 2

' Возвращает ненулевое значение, если файл TESTFILE ' имеет атрибуты "скрытый" и "только для чтения"
Debug.Print MyAttr And vbHidden 

' Предположим, что файл TESTFILE 
' имеет атрибуты "скрытый" и "только для чтения"
MyAttr = GetAttr("TESTFILE") ' возвращает 3

' Возвращает ненулевое значение, если файл TESTFILE 
' имеет атрибуты "скрытый" и "только для чтения"
Debug.Print MyAttr And (vbHidden + vbReadOnly) 

' Предположим, что MYDIR является каталогом или папкой
MyAttr = GetAttr("MYDIR") ' возвращает 16

Категория
Функции работы с файлами

Trying to use Excel VBA to capture all the file attributes from files on disk, including extended attributes. Was able to get it to loop through the files and capture the basic attributes (that come from the file system):

  • File Path
  • File Name
  • File Size
  • Date Created
  • Date Last Accessed
  • Date Last Modified
  • File Type

Would also like to capture the extended properties that come from the file itself:

  • Author
  • Keywords
  • Comments
  • Last Author
  • Category
  • Subject

And other properties which are visible when right clicking on the file.

The goal is to create a detailed list of all the files on a file server.

Todd Main's user avatar

Todd Main

28.9k11 gold badges82 silver badges146 bronze badges

asked Apr 13, 2011 at 15:39

Jim McKeeth's user avatar

Jim McKeethJim McKeeth

38.1k23 gold badges123 silver badges193 bronze badges

You say loop .. so if you want to do this for a dir instead of the current document;

Dim sFile As Variant
Dim oShell: Set oShell = CreateObject("Shell.Application")
Dim oDir:   Set oDir = oShell.Namespace("c:foo")

For Each sFile In oDir.Items
   Debug.Print oDir.GetDetailsOf(sFile, XXX) 
Next

Where XXX is an attribute column index, 9 for Author for example.
To list available indexes for your reference you can replace the for loop with;

for i = 0 To 40
   debug.? i, oDir.GetDetailsOf(oDir.Items, i)
Next

Quickly for a single file/attribute:

Const PROP_COMPUTER As Long = 56

With CreateObject("Shell.Application").Namespace("C:HOSTDIRECTORY")
    MsgBox .GetDetailsOf(.Items.Item("FILE.NAME"), PROP_COMPUTER)
End With

June7's user avatar

June7

19.5k8 gold badges24 silver badges33 bronze badges

answered Apr 13, 2011 at 16:20

Alex K.'s user avatar

3

You can get this with .BuiltInDocmementProperties.

For example:

Public Sub PrintDocumentProperties()
    Dim oApp As New Excel.Application
    Dim oWB As Workbook
    Set oWB = ActiveWorkbook

    Dim title As String
    title = oWB.BuiltinDocumentProperties("Title")

    Dim lastauthor As String
    lastauthor = oWB.BuiltinDocumentProperties("Last Author")

    Debug.Print title
    Debug.Print lastauthor
End Sub

See this page for all the fields you can access with this: http://msdn.microsoft.com/en-us/library/bb220896.aspx

If you’re trying to do this outside of the client (i.e. with Excel closed and running code from, say, a .NET program), you need to use DSOFile.dll.

answered Apr 13, 2011 at 15:57

Todd Main's user avatar

Todd MainTodd Main

28.9k11 gold badges82 silver badges146 bronze badges

3

'vb.net
'Extended file stributes
'visual basic .net sample 

Dim sFile As Object
        Dim oShell = CreateObject("Shell.Application")
        Dim oDir = oShell.Namespace("c:temp")

        For i = 0 To 34
            TextBox1.Text = TextBox1.Text & oDir.GetDetailsOf(oDir, i) & vbCrLf
            For Each sFile In oDir.Items
                TextBox1.Text = TextBox1.Text & oDir.GetDetailsOf(sFile, i) & vbCrLf
            Next
            TextBox1.Text = TextBox1.Text & vbCrLf
        Next

Laurel's user avatar

Laurel

5,93314 gold badges31 silver badges57 bronze badges

answered Jun 2, 2016 at 17:05

Jorge Gudiño's user avatar

I was finally able to get this to work for my needs.

The old voted up code does not run on windows 10 system (at least not mine). The referenced MS library link below provides current examples on how to make this work. My example uses them with late bindings.

https://learn.microsoft.com/en-us/windows/win32/shell/folder-getdetailsof.

The attribute codes were different on my computer and like someone mentioned above most return blank values even if they are not. I used a for loop to cycle through all of them and found out that Title and Subject can still be accessed which is more then enough for my purposes.

Private Sub MySubNamek()
Dim objShell  As Object 'Shell
Dim objFolder As Object 'Folder

Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.NameSpace("E:MyFolder")

If (Not objFolder Is Nothing) Then
Dim objFolderItem As Object 'FolderItem
Set objFolderItem = objFolder.ParseName("Myfilename.txt")
        For i = 0 To 288
           szItem = objFolder.GetDetailsOf(objFolderItem, i)
           Debug.Print i & " - " & szItem
       Next
Set objFolderItem = Nothing
End If

Set objFolder = Nothing
Set objShell = Nothing
End Sub

help-info.de's user avatar

help-info.de

6,43016 gold badges42 silver badges40 bronze badges

answered Oct 1, 2019 at 19:41

kdoske's user avatar

3

Lucky discovery

if objFolderItem is Nothing when you call

objFolder.GetDetailsOf(objFolderItem, i)

the string returned is the name of the property, rather than its (undefined) value
e.g. when i=3 it returns «Date modified»

Doing it for all 288 values of I makes it clear why most cause it to return blank for most filetypes
e.g i=175 is «Horizontal resolution»

Muhammad Dyas Yaskur's user avatar

answered Jun 5, 2020 at 21:01

Steve Corless's user avatar

1

Главная » Функции VBA »

28 Апрель 2011              99053 просмотров

  • CurDir() — функция, которая возвращает путь к каталогу(для указанного диска), в котором по умолчанию будут сохраняться файлы:
        Dim sCurDir As String
        sCurDir = CurDir("D")
  • Dir() — позволяет искать файл или каталог по указанному пути на диске. Пример использования можно посмотреть в статье: Просмотреть все файлы в папке
  • EOF() — при операции записи в файл на диске эта функция вернет True, если вы находитесь в конце файла. Обычно используется при работе с текстовыми файлами — .txt. При сохранении книг Excel лучше использовать стандартные методы: Save и SaveAs.
  • Error() — позволяет вернуть описание ошибки по ее номеру. Генерировать ошибку нужно при помощи метода RaiseError() специального объекта Er.
  • Print — записывает в открытый файл указанный текст. Далее будет приведен пример использования данной функции
  • FreeFile() — позволяет определить номер следующего свободного файла, который можно использовать как номер файла при его открытии методом Open. Предпочтительно применять именно этот метод определения номера файла(вместо статичного #1), чтобы не было неоднозначности обращения к файлам. Ниже приведены примеры применения данной функции при обращении к файлам
  • FileAttr() — позволяет определить, как именно был открыт файл в файловой системе: на чтение, запись, добавление, в двоичном или текстовом режиме и т.п. Применяется для работы с текстовыми файлами, открытыми при помощи Open "C:Text1.txt" For [] As #1
    Открыть файл можно несколькими способами, приведу примеры наиболее распространенных вариантов:

    • Input() — открывает текстовый файл на чтение. Т.е. таким методом можно открыть файл и вытянуть из него данные. Например, чтобы считать информацию из файла C:Text1.txt и вывести ее в окно Immediate можно применить такой код:
          Dim MyChar
          Open "C:Text1.txt" For Input As #1 'Открываем файл функцией Open() на чтение(Input)
          Do While Not EOF(1)  'пока файл не кончился
              ' Получаем по одному символу и добавляем его к предыдущим
              MyChar = MyChar & Input(1, #1)
          Loop
          Close #1 ' Закрываем файл
          'Выводим его содержание в окно Immediate
          '(отобразить Immediate: Ctrl+G в окне редактора VBA)
          Debug.Print MyChar
          'или в MsgBox
          MsgBox MyChar, vbInformation, "www.excel-vba.ru"
    • Ouput() — метод открывает файл для записи. Например, чтобы записать в файл строку, содержащую все ячейки в выделенном диапазоне, можно использовать такой код:
      Sub SelectionToTxt()
          Dim s As String, rc As Range
          Dim ff
          'запоминаем все значения из выделенной строки в строку
          For Each rc In Selection
              If s = "" Then 'если пока ничего не записали - присваиваем только значение ячейки
                  s = rc.Value
              Else 'если уже записано - добавляем через TAB
                  s = s & vbTab & rc.Value
              End If
          Next
          ff = FreeFile
          'Открываем текстовый файл
          'если файла нет - он будет создан
          Open "C:Text1.txt" For Output As #ff
          'записываем значение строки в файл
          Print #ff, s
          Close #ff ' Закрываем файл
      End Sub

      Важно помнить, что при открытии файла таким методом(Output) все предыдущие данные из файла стираются и в файле будет записано только то, что мы записали в текущем сеансе. Если данные необходимо добавить к имеющимся — используется метод Append

    • Append() — метод открывает файл для записи, но в отличии от Output записывает данные в конец файла, а не перезаписывает текущие данные. Например, код добавления выделенных ячеек как одной строки в имеющийся файл будет выглядеть так:
      Sub SelectionToTxt_Add()
          Dim s As String, rc As Range
          Dim ff
          'запоминаем все значения из выделенной строки в строку
          For Each rc In Selection
              If s = "" Then 'если пока ничего не записали - присваиваем только значение ячейки
                  s = rc.Value
              Else 'если уже записано - добавляем через TAB
                  s = s & vbTab & rc.Value
              End If
          Next
          ff = FreeFile
          'Открываем текстовый файл
          'если файла нет - он будет создан
          Open "C:Text1.txt" For Append As #ff
          'записываем значение строки в файл
          Print #ff, s
          Close #ff ' Закрываем файл
      End Sub
  • FileDateTime() — позволяет получить информацию о последнем времени обращения к указанному файлу. Если к файлу после создания ни разу не обращались, то это будет время создания файла. Если попытаться обратиться к уже открытой книге/файлу — то будет получено время открытия книги/файла, а не создания или сохранения.
        sFileDateTime = FileDateTime("C:Text1.txt")
  • FileLen() — позволяет определить длину указанного файла в байтах:
        MsgBox FileLen("C:Text1.txt") & " bites", vbInformation, "www.excel-vba.ru"
  • GetAttr() — возможность обратиться к файлу к файловой системе и получить информацию об его атрибутах (скрытый, доступен только для чтения, архивный и т.п.)
  • InputB() — позволяет указывать количество байт, которые надо считать из файла. Альтернатива методу Open в случаях, когда необходимо считывать данные не по конкретным строкам, а именно побайтово.
  • Loc() — от Location, то есть местонахождение — возвращает число, которое определяет текущее место вставки или чтения в открытом файле.
  • Seek() — очень похожа на функцию Loc(), но Seek() возвращает информацию о позиции, с которой будет выполняться следующая операция чтения или вставки.
  • LOF() — length of file — позволяет определить длину открытого файла в байтах.

Статья помогла? Сделай твит, поделись ссылкой с друзьями!

Понравилась статья? Поделить с друзьями:
  • Vba excel ассоциативный массив
  • Vba excel аналог функции или
  • Vba excel аналог поиск
  • Vba excel активная ячейка это
  • Vba excel активная ячейка на листе