¿Cómo usar la función Seek en VBA?

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.

Unlock Your Potential

Excel

Basic - Advanced

Access

Access Basic - Advanced

Power BI

Power BI Basic - Advanced

Help us grow the project