Return to VBA Code Examples
EOF Description
Returns the value indicating if the end of a file has been reached (Boolean).
EOF Syntax
In the VBA Editor, you can type “EOF(” to see the syntax for the EOF Function:
The EOF function contains an argument:
FileNumber: Any valid file number.
Examples of Excel VBA EOF Function
To test the EOF function, create a text file “test.txt” on the D drive.(D:test.txt) Assume that the content of the file is as following.
abc
1 2 3
xy z
Please run the following code.
Sub Input_Fx_Example()
Dim strContent As String
Dim MyChar
Open "D:test.txt" For Input As #1 ' Open file.
Do While Not EOF(1) ' Loop until end of file.
MyChar = Input(1, #1) ' Get one character.
strContent = strContent & MyChar '
Loop
MsgBox strContent
Close #1 ' Close file.
End Sub
Then, the result will be as following.
Here, used EOF function to determine that the end of a file has been reached.
VBA Coding Made Easy
Stop searching for VBA code online. Learn more about AutoMacro — A VBA Code Builder that allows beginners to code procedures from scratch with minimal coding knowledge and with many time-saving features for all users!
Learn More!
Содержание
- Функция EOF
- Синтаксис
- Замечания
- Пример
- См. также
- Поддержка и обратная связь
- EOF function
- Syntax
- Remarks
- Example
- See also
- Support and feedback
- VBA EOF Function
- EOF Description
- EOF Syntax
- Examples of Excel VBA EOF Function
- VBA Coding Made Easy
- VBA Code Examples Add-in
- Excel vba if eof
- Файловые функции VBA
Функция EOF
Возвращает аргумент Integer, содержащий логическое значение True, когда достигнут конец файла, открытого для случайного или последовательного ввода.
Синтаксис
EOF(filenumber)
Обязательный аргументfilenumber — это целое число, содержащее любой допустимый номер файла.
Замечания
Используйте функцию EOF, чтобы избежать ошибок, вызываемых попытками выполнить ввод после конца файла.
Функция EOF возвращает значение False, пока не будет достигнут конец файла. Если файлы открыты для случайного или двоичного доступа, EOF возвращает значение False , пока последняя выполненная инструкция Get не сможет прочитать всю запись.
Если файлы открыты для двоичного доступа, попытка прочитать файл с помощью функции Input до тех пор, пока EOF не вернет значение True , создает ошибку. Используйте функции LOF и Loc вместо EOF при чтении двоичных файлов с помощью входных данных или get при использовании функции EOF . Когда файлы открыты для вывода, функция EOF всегда возвращает True.
Пример
В этом примере используется функция EOF для обнаружения конца файла. В этом примере предполагается, что MYFILE это текстовый файл с несколькими строками текста.
См. также
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.
Источник
EOF function
Returns an Integer containing the Boolean value True when the end of a file opened for Random or sequential Input has been reached.
Syntax
EOF(filenumber)
The required filenumber argument is an Integer containing any valid file number.
Use EOF to avoid the error generated by attempting to get input past the end of a file.
The EOF function returns False until the end of the file has been reached. With files opened for Random or Binary access, EOF returns False until the last executed Get statement is unable to read an entire record.
With files opened for Binary access, an attempt to read through the file by using the Input function until EOF returns True generates an error. Use the LOF and Loc functions instead of EOF when reading binary files with Input, or use Get when using the EOF function. With files opened for Output, EOF always returns True.
Example
This example uses the EOF function to detect the end of a file. This example assumes that MYFILE is a text file with a few lines of text.
See also
Support and feedback
Have questions or feedback about Office VBA or this documentation? Please see Office VBA support and feedback for guidance about the ways you can receive support and provide feedback.
Источник
VBA EOF Function
In this Article
EOF Description
Returns the value indicating if the end of a file has been reached (Boolean).
EOF Syntax
In the VBA Editor, you can type “EOF(” to see the syntax for the EOF Function:
The EOF function contains an argument:
FileNumber: Any valid file number.
Examples of Excel VBA EOF Function
To test the EOF function, create a text file “test.txt” on the D drive.(D:test.txt) Assume that the content of the file is as following.
Please run the following code.
Then, the result will be as following.
Here, used EOF function to determine that the end of a file has been reached.
VBA Coding Made Easy
Stop searching for VBA code online. Learn more about AutoMacro — A VBA Code Builder that allows beginners to code procedures from scratch with minimal coding knowledge and with many time-saving features for all users!
VBA Code Examples Add-in
Easily access all of the code examples found on our site.
Simply navigate to the menu, click, and the code will be inserted directly into your module. .xlam add-in.
Источник
Excel vba if eof
Описание
BOF — возвращает значение, показывающее, расположен ли указатель текущей записи в позиции перед первой записью объекта Recordset.
EOF — возвращает значение, показывающее, расположен ли указатель текущей записи в позиции после последней записи объекта Recordset.
Значение
Возвращаемые значения свойств BOF и EOF имеют тип данных Boolean.
Свойство BOF возвращает значение True, если указатель текущей записи расположен перед первой записью набора записей, и значение False, если указатель текущей записи расположен на первой записи набора или на любой записи после нее.
Свойство EOF возвращает значение True, если указатель текущей записи расположен после последней записи набора, и значение False, если указатель текущей записи расположен на последней записи набора или на любой записи перед ней.
Замечания
Свойства BOF и EOF используют для проверки наличия записей в объекте Recordset, а также для сообщения о выходе за пределы объекта при перемещении от записи к записи.
Возвращаемые значения свойств BOF и EOF определяются положением указателя текущей записи.
Если любое из свойств BOF или EOF имеет значение True, текущая запись не определена.
При открытии объекта Recordset, не содержащего ни одной записи, оба свойства BOF и EOF получают значение True, а свойство набора записей RecordCount (число записей) получает значение 0. При открытии объекта Recordset, который содержит хотя бы одну запись, первая запись набора становится текущей записью, а свойства BOF и EOF получают значения False. Данные свойства сохраняют значения False до тех пор, пока указатель текущей записи не переместится за пределы начала или конца набора записей при использовании, соответственно, методов MovePrevious или MoveNext, соответственно. После выхода за пределы набора записей текущая запись становится неопределенной.
После удаления последней оставшейся записи объекта Recordset свойства BOF и EOF могут сохранять значение False до тех пор, пока не будет предпринята попытка изменить положение указателя текущей записи.
При вызове метода MoveLast для объекта Recordset, содержащего записи, текущей записью становится последняя запись набора. Если после этого вызвать метод MoveNext, то текущая запись становится неопределенной, а свойство EOF получает значение True. Аналогично, при вызове метода MoveFirst для непустого объекта Recordset текущей записью становится первая запись набора. Последующий вызов метода MovePrevious приводит к тому, что текущая запись становится неопределенной, а свойство BOF получает значение True.>br> Как правило, при работе со всеми записями из объекта Recordset в программе задают перемещение в цикле по записям с помощью метода MoveNext до тех пор, пока свойство EOF не получит значение True.
Вызов метода MoveNext или MovePrevious, когда, соответственно, свойство EOF или BOF имеет значение True, приводит к возникновению ошибки.
В следующей таблице показано, какие из методов группы Move можно применять при различных комбинациях значений свойств BOF и EOF.
Допустимость применения метода из группы Move еще не означает, что метод обязательно обнаружит запись. Это просто означает, что попытка выполнить указанный метод Move является допустимой и не приведет к ошибке. В результате вызова метода из группы Move состояние свойств BOF и EOF может измениться.
При вызове метода OpenRecordset неявно выполняется метод MoveFirst. Таким образом, в результате вызове метода OpenRecordset для пустого набора записей свойства BOF и EOF получают значение True. (Результаты неудачной попытки выполнить метод MoveFirst представлены в приведенной ниже таблице).
Все методы группы Move, в которых успешно обнаруживается запись, задают для свойств BOF и EOF значение False.
В рабочей области Microsoft Jet при добавлении записи в пустой объект Recordset, свойство BOF получает значение False, а свойство EOF сохраняет значение True, указывающее, что позиция текущей записи находится в конце объекта Recordset. В рабочей области ODBCDirect оба свойства BOF и EOF получают значение False, указывающее, что позиция текущей записи находится на новой записи.
Любой вызов метода Delete, даже приводящий к удалению последней записи из набора записей, не изменяет значения свойств BOF и EOF.
Результаты для свойств BOF и EOF вызова одного из методов Move, не приведшего к обнаружению записи, представлены в следующей таблице.
Пример
Следующая программа демонстрирует использование свойств BOF и EOF для перемещения назад и вперед по объекту Recordset.
Источник
Файловые функции VBA
- CurDir() — функция, которая возвращает путь к каталогу(для указанного диска), в котором по умолчанию будут сохраняться файлы:
Dim sCurDir As String sCurDir = CurDir(«D»)
- 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»
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 записывает данные в конец файла, а не перезаписывает текущие данные. Например, код добавления выделенных ячеек как одной строки в имеющийся файл будет выглядеть так:
Источник
Чтение и запись в файл, открытый с помощью оператора Open. Операторы Input, Line Input, Write и функция EOF. Примеры использования в VBA Excel.
Операторы чтения и записи в файл
Оператор Input #
Оператор Input # считывает данные из открытого файла с последовательным доступом и присваивает эти данные переменным.
Оператор Input # используется только с файлами, открытыми в режиме Input или Binary. При прочтении стандартные строковые или числовые значения присваиваются переменным без изменения.
Синтаксис оператора Input #:
Input #Номер_файла, Переменные |
Компоненты оператора Input #:
- Номер_файла – обязательный параметр, представляющий из себя номер, присвоенный файлу при открытии с помощью оператора Open.
- Переменные – обязательный параметр, представляющий из себя список переменных, разделенных запятой, которым присваиваются значения, считанные из файла.
Особенности применения оператора Input #:
- Элементы данных в файле должны быть указаны в том же порядке, что и переменные в списке Переменные, и соответствовать им по типу данных. Если переменная числовая, а данные текстовые, этой переменной будет присвоено нулевое значение.
- Если при чтении данных достигнут конец файла, чтение прерывается и возникает ошибка. Для ее предупреждения в коде VBA Excel используется функция EOF.
- Чтобы данные из файла могли быть правильно прочитаны и записаны в переменные с помощью оператора Input #, они должны быть записаны в файл с помощью оператора Write #. Он обеспечивает правильное разделение каждого из полей (элементов) данных.
Оператор Line Input #
Оператор Line Input # считывает одну строку из открытого файла с последовательным доступом и присваивает ее значение строковой переменной.
Оператор Line Input # считывает из файла по одному символу до тех пор, пока не встретится символ возврата каретки (Chr(13)) или последовательность символа возврата каретки и перевода строки (Chr (13) + Chr(10)).
Синтаксис оператора Line Input #:
Line Input #Номер_файла, Переменная |
Компоненты оператора Line Input #:
- Номер_файла – обязательный параметр, представляющий из себя номер, присвоенный файлу при открытии с помощью оператора Open.
- Переменная – обязательный параметр, представляющий из себя имя переменной, объявленной как String или Variant, которой присваивается строка, считанная из файла.
Оператор Write #
Оператор Write # записывает данные в файл с последовательным доступом.
Синтаксис оператора Write #:
Write #Номер_файла, [Данные] |
Компоненты оператора Write #:
- Номер_файла – обязательный параметр, представляющий из себя номер, присвоенный файлу при открытии с помощью оператора Open.
- Данные – необязательный параметр, представляющий из себя одно или несколько числовых или строковых выражений, разделенных запятой, которые нужно записать в файл.
Особенности применения оператора Write #:
- Данные, записанные с помощью оператора Write #, считываются из файла с помощью оператора Input #.
- Если опустить параметр Данные и добавить запятую после Номер_файла, в файл будет добавлена пустая строка.
- Несколько выражений в списке Данные могут быть разделены точкой с запятой или запятой.
- Числовые данные всегда записываются с точкой в качестве разделителя целой и дробной части.
- Оператор Write # вставляет запятые между элементами и прямые парные кавычки вокруг строк при их записи в файл.
- После записи в файл последнего символа из параметра Данные оператор Write # вставляет символы возврата каретки и перевода строки (Chr (13) + Chr(10)).
Функция EOF
Функция EOF возвращает логическое значение True, когда достигнут конец файла, открытого для последовательного (Input) или произвольного (Random) доступа.
Синтаксис функции EOF:
Номер_файла – это номер, присвоенный файлу при открытии с помощью оператора Open.
Функция EOF используется для предупреждения ошибок, вызываемых попытками выполнить чтение после конца файла. Она возвращает значение False, пока не будет достигнут конец файла.
Примеры чтения и записи в файл
Пример 1
Открытие (или создание, если он не существует) текстового файла для чтения и записи и запись в него одной строки, состоящей из двух текстовых и одного числового значений. Файл с именем myFile1.txt будет создан в той же папке, где расположен файл Excel с кодом VBA.
Sub Test1() Dim ff As Integer ‘Получаем свободный номер для открываемого файла ff = FreeFile ‘Открываем (или создаем) файл для чтения и записи Open ThisWorkbook.Path & «myFile1.txt» For Output As ff ‘Записываем в файл одну строку Write #ff, «Дает корова молоко!», _ «Куда идет король?», 25.35847 ‘Закрываем файл Close ff ‘Открываем файл для просмотра ThisWorkbook.FollowHyperlink (ThisWorkbook.Path & «myFile1.txt») End Sub |
Строки и число можно предварительно присвоить переменным, объявленным с соответствующими типами данных, и использовать их для записи данных в файл (в строках кода с оператором Write #, как в этом и следующем примерах).
Пример 2
Открытие (или создание, если он не существует) файла без расширения для чтения и записи и запись в него трех строк: двух текстовых и одной в числовом формате. Файл с именем myFile2 будет создан в той же папке, где расположен файл Excel с кодом VBA.
Так как у файла нет расширения, Windows выведет диалоговое окно для выбора открывающей его программы. Выберите любой текстовый редактор или интернет-браузер.
Sub Test2() Dim ff As Integer ‘Получаем свободный номер для открываемого файла ff = FreeFile ‘Открываем (или создаем) файл для чтения и записи Open ThisWorkbook.Path & «myFile2» For Output As ff ‘Записываем в файл три строки Write #ff, «Дает корова молоко!» Write #ff, «Куда идет король?» Write #ff, 25.35847 ‘Закрываем файл Close ff ‘Открываем файл для просмотра ThisWorkbook.FollowHyperlink (ThisWorkbook.Path & «myFile2») End Sub |
Пример 3
Считываем строку, разделенную на отдельные элементы, из файла myFile1.txt и записываем в три переменные, по типу данных соответствующие элементам.
Sub Test3() Dim ff As Integer, str1 As String, _ str2 As String, num1 As Single ‘Получаем свободный номер для открываемого файла ff = FreeFile ‘Открываем файл myFile1.txt для чтения Open ThisWorkbook.Path & «myFile1.txt» For Input As ff ‘Считываем строку из файла и записываем в переменные Input #ff, str1, str2, num1 Close ff ‘Смотрим, что записалось в переменные MsgBox «str1 = « & str1 & vbNewLine _ & «str2 = « & str2 & vbNewLine _ & «num1 = « & num1 End Sub |
Попробуйте заменить в этом примере строку Input #ff, str1, str2, num1
сначала на строку Input #ff, str1
, затем на строку Line Input #ff, str1
, чтобы наглядно увидеть разницу между операторами Input # и Line Input #.
В следующих примерах (4 и 5) замена оператора Input # на Line Input # не приведет ни к каким изменениям, так как данные в строках файла myFile2 не разделены на элементы (поля).
Пример 4
Считываем поочередно три строки из файла myFile2 и записываем в три элемента массива, объявленного как Variant, так как в этот файл ранее были записаны две строки с текстом и одна с числом.
Sub Test4() Dim ff As Integer, a(2) As Variant, i As Byte ‘Получаем свободный номер для открываемого файла ff = FreeFile ‘Открываем файл myFile2 для чтения Open ThisWorkbook.Path & «myFile2» For Input As ff ‘Считываем строки из файла и записываем в элементы массива For i = 0 To 2 Input #ff, a(i) Next Close ff ‘Смотрим, что записалось в элементы массива MsgBox «a(0) = « & a(0) & vbNewLine _ & «a(1) = « & a(1) & vbNewLine _ & «a(2) = « & a(2) End Sub |
Пример 5
Считываем с помощью цикла Do While… Loop все строки из файла myFile2 и записываем построчно в переменную, объявленную как String (число из третьей строки запишется как текст). Для остановки цикла при достижении конца файла используем функцию EOF.
Sub Test5() Dim ff As Integer, a As Variant, b As String ‘Получаем свободный номер для открываемого файла ff = FreeFile ‘Открываем файл myFile2 для чтения Open ThisWorkbook.Path & «myFile2» For Input As ff ‘Считываем строки из файла и записываем в элементы массива Do While Not EOF(ff) Input #ff, a b = b & a & vbNewLine Loop Close ff ‘Смотрим, что записалось в переменную MsgBox b End Sub |
Предыдущая часть темы об открытии файла для ввода и вывода информации опубликована в статье: Оператор Open (синтаксис, параметры). Смотрите также связанную статью: Функция FreeFile.
Смотрите, как создавать и открывать текстовые файлы с помощью методов CreateTextFile и OpenTextFile. Чтение файла, запись и добавление информации с помощью объекта TextStream.
Text files are a common source for storing and transporting information.
This topic will address access, key functions and ways to import and export this data with VBA.
VBA Open
To perform tasks with a text file in VBA you must first access it. We will do this through instruction Open.
Open requires parameters for:
- O pathname (directory or folder, and drive)
- O mode of access (Append, Binary, Input, Output, or Random)
- A filenumber of access (represented by a unique number per file)
Open PathName For Mode As #FileNumber.
Each of these parameters will be detailed below.
File’s Path
You can assign the path name in two ways:
PathName = "C:testdatabase.txt" 'Directly through folders path
PathName = Application.GetOpenFilename() 'Through a dialog box selecting the file
The first form is used when the path does not change constantly. The second gives freedom, at each execution, to choose a different path.
Both of these forms will result in PathName associated with a String of the file location.
Mode
The mode must be one of the following commands:
Output — Used to write Excel content to the text file
Input — Used to read the file
Append — Used to add content to a file
Binary — Used to read and write data in a byte format
Random — Used to place characters of defined size
The focus of this tutorial will be only on: Input (import) and Output (export).
File Number
Each open file must contain a numbering, a number between 1 and 511 preceded by a hashtag #. Normally the numbering starts at #1 and follows successively #2…
Use the FreeFile statement to get the next available file number. If none is in use, FreeFile() will return 1.
Testing Open Instruction
The following code will access the file you selected with Application.GetOpenFilename()
Sub OpenTeste()
Dim PathName As String
PathName = Application.GetOpenFilename()
'Opens the dialog box to select the file
'Notice that PathName will be a path String E.g. "C:..."
Dim FileNumber As Integer
FileNumber = FreeFile() 'Assigns the first available file number (E.g.: #1)
Open PathName For Input As #FileNumber
Close #FileNumber 'Closes the file (the number in FileNumber can be reused)
End Sub
Despite access, no information was imported or exported. To carry out these actions, we will need the help of the functions Input and Output respectively.
Import Text File
To import content from a text file into Excel we will use an example file called «database.txt» and the function Input:
Sub SimpleImport()
Dim PathName As String
PathName = Application.GetOpenFilename()
'Opens the dialog box to select the file
'Notice that PathName will be a path String E.g. "C:...database.txt"
Dim FileNumber As Integer
Open PathName For Input As #1 'File will be associated with the #1
FirstCharacter = Input(1, #1) 'Collect 1 character from file # 1
SecondCharacter = Input(1, #1) 'Collect 1 more character, this being the next one (the 2nd in this case)
MsgBox FirstCharacter
MsgBox SecondCharacter
Close #1 'Close the file (number #1 to be reused)
End Sub
To collect all the characters at once we can use the LOF function:
Sub LOFimport()
Dim PathName As String
PathName = Application.GetOpenFilename()
'Opens the dialog box to select the file
'Notice that PathName will be a path String E.g. "C:...database.txt"
Dim FileNumber As Integer
Open PathName For Input As #1 'File will be associated with the #1
MsgBox LOF(1) 'Total number of characters in file # 1
Allcharacters = Input(LOF(1), #1) 'Collect all characters from file # 1
MsgBox Allcharacters
Close #1 'Close the file (number #1 to be reused)
End Sub
LOF returns the number of bytes of the file opened with Open. Because this is a text file, each byte is one character. Thus, the number of bytes will equal the number of characters.
To import the data into spreadsheet we can use the following code:
Sub TextImport ()
Dim PathName As String
Dim FileNumber As Integer
Dim Textdata As String
Dim BreakingLine as Variant
Dim Lastline as Integer
Dim Firstline as Integer
'Opens the dialog box to select the file
PathName = Application.GetOpenFilename()
'Or enter a path with PathName = "C:FILE_LOCATIONdatabase.txt"
FileNumber = FreeFile() 'Assigns the first available file number (E.g.: #1)
Open PathName For Input As #FileNumber 'Open file in read mode
'Copy the contents to Worksheet ---
Textdata = Input(LOF(FileNumber), FileNumber) 'Loads all file contents into variable
BreakingLine = Split(Textdata, vbCrLf) 'Creates a vector with each line of the file
Lastline = UBound(BreakingLine) 'Determines the last line of the vector
Firstline = LBound(BreakingLine) 'Determines the first line of the vector
'Transpose the vectors into the worksheet
Range("A1").Resize((Lastline) - (Firstline) + 1).Value = Application.Transpose(BreakingLine)
'----------------------------------
Close #FileNumber 'Closes the file (the number in FileNumber can be reused)
End Sub
vbCrLf is a non-visible character CrLf indicates a line break in the file.
Main Functions Related to Open
Function | Description |
---|---|
FreeFile | Returns the next available number for the Open statement. Important when working with multiple files. |
BOF | Returns True if it is at the beginning of the defined #filenumber. |
EOF | Returns True if it has finished reading the defined #filenumber. |
LOF | Returns the size in bytes of the defined #filenumber. |
Loc | Returns the current read and write position for the Open. |
BOF and EOF assist in building Loops when you want to work character by character, or line by line.
Character per character
'Collect one by one
Characters = Input(1, #1) 'Collect 1 character from file # 1
Characters = Characters & Input(1, #1) 'Collect 1 more character, this being the next
Characters = Characters & Input(1, #1) 'Collect 1 more character, this being the next
'...
Loop with EOF support
'Loop with EOF support
Characters = ""
Do While Not EOF(1)
Characters = Characters & Input(1, #1)
Loop
Loop with BOF support
'Loop with BOF support
Do While BOF(1)
Characters = Characters & Input(1, #1)
Loop
Export Text File
To export worksheet content to a text file:
Sub TextExport()
Dim LastRow As Long
Dim LastColumn As Long
Dim NewFile As String
Dim FileNumber As Integer
Dim CellData As Variant
FileNumber = FreeFile ' Assigns the first available file number (E.g.: #1)
'Determines the last row of the worksheet with data
LastRow = Cells(Rows.Count, 1).End(xlUp).Row
'Determines the last column of the worksheet with data
LastColumn = Cells(1, Columns.Count).End(xlToLeft).Column
NewFile = "C:TestExport.txt" 'Use an existing folder
'Exports the data from the worksheet to the created file
Open NewFile For Output As #FileNumber
For i = 1 To LastRow
For j = 1 To LastColumn
If j = LastColumn Then
CellData = CellData & Cells(i, j).Value
Else
CellData = CellData & Cells(i, j).Value & " "
End If
Next j
Print #FileNumber, CellData
CellData = ""
Next i
Close #FileNumber 'Saves and closes the text file with the data
End Sub
An error will occur if the folder you are saving the file does not already exist.
CSV File
A .csv file (Comma Separated Values) is, as the name suggests, a text file in which the items in each row are separated by commas, delimiting what should go in each column.
It is a very common type of file, and since each line refers several times to multiple columns, it may require a treatment with loops and functions, such as BOF and EOF.
Import CSV File
For ease of import, the Line Input instruction (which works line by line), rather than just Input (which works character by character).
Sub OpenTextToCSV()
Dim PathName As String
Dim FileNumber As Integer
Dim FileRow As String
Dim RowItem As Variant
Dim LastRow As Long
'Opens the dialog box to select the file
PathName = Application.GetOpenFilename()
'Or enter a path Ex: PathName = "C:testdatabase.txt"
FileNumber = FreeFile ' Assigns the first available file number (Ex: #1)
Open PathName For Input As #FileNumber 'Opens the file in read mode
Do Until EOF(FileNumber)
Line Input #FileNumber, FileRow
RowItem = Split(FileRow, ", ")
i = i + 1
LastRow = UBound(RowItem)
For j = 1 To LastRow + 1
Cells(i, j).Value = RowItem(j - 1)
Next
Loop
Close #FileNumber
End Sub
Export CSV File
Similar to exporting text, however mandatory the use of «, « in the separation of elements.
Sub SaveTextToCSV()
Dim LastRow As Long
Dim LastColumn As Long
Dim NewFile As String
Dim FileNumber As Integer
Dim CellData As Variant
FileNumber = FreeFile ' Assigns the first available file number (Ex: #1)
'Determines the last row of the worksheet with data
LastRow = Cells(Rows.Count, 1).End(xlUp).Row
'Determines the last column of the worksheet with data
LastColumn = Cells(1, Columns.Count).End(xlToLeft).Column
NewFile = "C:TestExport.csv" 'Use an existing folder
'Exports the data from the worksheet to the created file
Open NewFile For Output As #FileNumber
For i = 1 To LastRow
For j = 1 To LastColumn
If j = LastColumn Then
CellData = CellData & Cells(i, j).Value
Else
CellData = CellData & Cells(i, j).Value & ", "
End If
Next j
Print #FileNumber, CellData
CellData = ""
Next i
Close #FileNumber 'Saves and closes the text file with the data
End Sub
An error will occur if the folder you are saving the file does not already exist.
SuperExcelVBA.com is learning website. Examples might be simplified to improve reading and basic understanding. Tutorials, references, and examples are constantly reviewed to avoid errors, but we cannot warrant full correctness of all content. All Rights Reserved.
Excel ® is a registered trademark of the Microsoft Corporation.
© 2023 SuperExcelVBA | ABOUT
EOF
EOF(FileNumber)
Функция EOF(End Of File) проверяет, достигнут ли конец файла. С помощью этой функции можно избежать ошибок, возникающих при попытках чтения или записи после достижения конца файла. Функция EOF возвращает значение False до тех пор, пока не будет достигнут конец файла. При использовании с файлами, открытыми в режиме Random или Binary, функция EOF возвращает значение True, если последней выполненной инструкции Get не удалось считать целую запись; в противном случае возвращается значение False.
Для файлов, открытых для доступа в режиме Binary, попытка чтения файла с помощью функции Input до возвращения функцией EOF значения True приводит к ошибке. При чтении двоичных файлов с помощью функции Input следует вместо функции EOF использовать функции LOF и Loc или использовать с функцией EOF инструкцию Get
Возвращаемое значение
Функция возвращает значение типа Integer, содержащее логическое значение True, при достижении конца файла
Примечание При обработке файлов, открытых с помощью Output, функция EOF всегда возвращает True
Параметры
- FileNumber
- Обязательный аргумент типа Integer, указывающий на любой допустимый номер файла
Пример
' В данном примере функция EOF
' используется для обнаружения конца файла. Предполагается,
' что MYFILE является текстовым файлом, который содержит
' несколько строк текста
Dim InputData
' Открываем файл для чтения
Open "MYFILE" For Input As #1
Do While Not EOF(1) ' Достигнут ли конец файла?
Line Input #1, InputData ' Читаем строку данных
Debug.Print InputData ' Выводим в окно отладки
Loop
' Закрываем файл
Close #1
Категория
Функции работы с файлами
Named Arguments
EOF Function 249
Syntax
EOF( filenumber) filenumber
Use: Required
Data: Integer
Any valid file number.
Return Value
An integer containing -1 (True), or 0 (False). Description
Returns an integer evaluating to True (-1) when the end of a file has been reached; until the end of the file is reached, EOF returns False (0).
Rules at a Glance
• filenumber must be a valid number used in the Open statement to open either a random or sequential file.
• If you have opened the file using either random or binary access, a Get statement that can’t read a complete record (i.e., an attempt to access a record past the last record in the file) causes EOF to return True.
Example iFile = FreeFile
Open sFilename for Input as #iFile Do While Not EOF(iFile)
LineInput #iFile, sDataLine
Loop
Close #iFile Programming Tips & Gotchas
• EOF allows you to test whether the end of a file has been reached without generating an error.
• Because EOF dates back to the times when VB didn’t support an intrinsic Boolean data type, the function uses an integer data type to hold the 0 and -1 False and True values.
• Because you always write data to sequential files at the end of the file, the file marker is always at the end of the file, and EOF therefore always returns True when testing files opened with their modes set equal to either input or append.
• As Visual Basic is continually enhanced with new functions and new objects, there are more efficient and elegant alternatives to some of the VB language elements that have been with us since before «Visual» was even thought of! The following snippets compare methods of populating an array with data extracted from a comma-delimited text file. The first snippet uses a standard Do…Loop and EOF flag:
250 Chapter 7- The Language Reference
Dim sFilename As String Dim sContents As String Dim iFile As Integer
Dim sArray() As String iFile = FreeFile sFilename = «testinput.txt» ReDim sArray(0)
Open sFilename For Input As #1 Do While Not EOF(1)
Input #1, sContents
ReDim Preserve sArray(UBound(sArray) + 1) sArray(UBound(sArray)) = sContents Loop Close #1
You can replace this with a single call to the Input function, passing to it the length of the text file, and, if you’re using VB6, you can call the Split function to parse the comma-delimited string:
Dim sFilename As String Dim sContents As String Dim iFile As Integer
Dim sArray() As String sFilename = «testinput.txt»
Open sFilename For Input As #iFile sContents = Input(LOF(iFile), iFile) Close #iFile sArray = Split(sContents, «,»)
Again, for VB6 users only, there is the object-oriented way of extracting the data, again passing the resulting string to the Split function to be parsed. For this example to work, you have to create a project reference to the Microsoft Scripting Runtime Library, which gives you access to the File System Object:
Dim sFilename As String
Dim sArray() As String
Dim ofsFileSys As New Scripting.FileSystemObject Dim ofsTextStream As TextStream sFilename = «testinput.txt» Set ofsTextStream = _
ofsFileSys.OpenTextFile(sFilename) sArray = Split(ofsTextStream.ReadAll, «,») Set ofsTextStream = Nothing
• Don’t confuse the EOF Function with the EOF property of the RDO, DAO, and ADO recordsets and result sets. The former is a function for testing the position of the file pointer in a file opened using the VBA Open statement; the latter is a property that indicates the state of the record pointer in a database or recordset opened using automation.
• The AtEndOfStream property is the TextStream object’s equivalent to the EOF function.
EOF Function 251
See Also
File System Objects, Get Statement, Loc Function, LOF Function, Open Statement
Continue reading here: Erase Statement
Was this article helpful?
Главная » Функции VBA »
28 Апрель 2011 99027 просмотров
- 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
- Input() — открывает текстовый файл на чтение. Т.е. таким методом можно открыть файл и вытянуть из него данные. Например, чтобы считать информацию из файла C:Text1.txt и вывести ее в окно Immediate можно применить такой код:
- 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 — позволяет определить длину открытого файла в байтах.
Статья помогла? Сделай твит, поделись ссылкой с друзьями!