La función `Seek` en VBA se utiliza principalmente para trabajar con archivos cuando estás usando el modo de acceso aleatorio (`Random`) o el modo de acceso secuencial (`Binary`). Permite establecer o devolver la posición actual del puntero en un archivo abierto. Aquí te explico cómo puedes utilizarla en cada modo:
Uso de Seek en Modo Binario
Cuando trabajas con archivos en modo binario, `Seek` se usa para establecer o recuperar la posición del puntero en el archivo en términos de bytes.
Leer desde una posición específica en un archivo binario:
Sub LeerArchivoBinario()
Dim fileNumber As Integer
Dim byteValue As Byte
' Asigna un número de archivo
fileNumber = FreeFile
' Abre el archivo en modo binario
Open "rutadelarchivo.bin" For Binary As #fileNumber
' Establece la posición del puntero en el byte 10
Seek #fileNumber, 10
' Lee un byte desde esa posición
Get #fileNumber, , byteValue
' Cierra el archivo
Close #fileNumber
' Muestra el valor leído
MsgBox "El valor del byte es: " & byteValue
End Sub
Establecer una posición y escribir en un archivo binario:
Sub EscribirArchivoBinario()
Dim fileNumber As Integer
Dim byteValue As Byte
Dim posicion As Long
byteValue = 255 ' Un ejemplo de valor de byte
posicion = 20 ' La posición donde quieres escribir
' Asigna un número de archivo
fileNumber = FreeFile
' Abre el archivo en modo binario
Open "rutadelarchivo.bin" For Binary As #fileNumber
' Establece la posición del puntero
Seek #fileNumber, posicion
' Escribe el byte en esa posición
Put #fileNumber, , byteValue
' Cierra el archivo
Close #fileNumber
End Sub
Uso de Seek en Modo Aleatorio
En el modo de acceso aleatorio, `Seek` devuelve o establece la posición de archivo para el siguiente `Get` o `Put`, y la posición se basa en el número de registro.
Leer y escribir en modo aleatorio:
Type EjemploRegistro
ID As Integer
Nombre As String * 20
End Type
Sub ManejarArchivoAleatorio()
Dim fileNumber As Integer
Dim registro As EjemploRegistro
' Asigna un número de archivo
fileNumber = FreeFile
' Abre el archivo en modo aleatorio
Open "rutadelarchivo.dat" For Random As #fileNumber Len = Len(registro)
' Posicionar para escribir en el registro 1
registro.ID = 1
registro.Nombre = "John Doe"
Put #fileNumber, 1, registro
' Leer desde el primer registro
Seek #fileNumber, 1
Get #fileNumber, , registro
' Cierra el archivo
Close #fileNumber
' Muestra el nombre del registro leído
MsgBox "Nombre: " & registro.Nombre
End Sub
En estas aplicaciones, alteras y recuperas posiciones dentro del archivo, permitiéndote leer y escribir datos de manera eficiente. Recuerda siempre cerrar los archivos después de finalizar la operación para liberar recursos.