In VBA (Visual Basic for Applications), the Seek statement is used with files opened in Binary, Random, or Input/Output (I/O) modes to move the file pointer to a specified position. This is particularly useful when you want to read from or write to a specific location in a file.
Here’s how to use the Seek statement:
Basic Syntax
VBA
Seek [#]filenumber, position
- filenumber: This is the file number used in the Open statement.
- position: This is the position in the file where you want to move the file pointer. The position is specified as a byte number for Binary files and as a record number for Random files.
Example Usage in Binary Mode
To move the file pointer in a file opened in Binary mode:VBA
Open "example.dat" For Binary As #1
Seek #1, 10 ' Move the file pointer to the 10th byte
' Read or write data at the 10th byte
Close #1
Example Usage in Random Mode
To move the file pointer in a file opened in Random mode:VBA
Open "example.dat" For Random As #1 Len = 128
Seek #1, 5 ' Move the file pointer to the 5th record
' Read or write data at the 5th record
Close #1
Using Seek with Input and Output
The Seek statement can also be used with files opened for Input or Output, but its behavior is different. For Input, Seek moves to a specified byte position. For Output, Seek is less commonly used since it always writes data to the end of the file.Error Handling
- If you attempt to seek beyond the end of a file in Binary or Random modes, no error occurs, and the file length is extended.
- If you Seek to a position before the beginning of the file, a runtime error occurs.
Considerations
- The first byte in a Binary file and the first record in a Random file are both considered to be at position 1 (not 0).
- In Random mode, the Len clause in the Open statement determines the size of each record.
- Seek is particularly useful for manipulating large files where you don’t want to read or write the entire file into memory.