Abrir Excel desde Access vba

Tengo un formulario cuyos datos proceden de una consulta. Esta consulta obtiene los datos a través de un archivo excel, mediante SQL (también lo he intentado vinculando el archivo excel a una tabla, el resultado ha es parecido). En el formulario he creado un botón para abrir el archivo excel y SI, lo consigo abrir, pero siempre en modo de lectura, con lo cual no puedo borrar e ingresar nuevos datos.

Los datos del archivo excel todos los dias cambia y son diferentes, es por ello el motivo de acceder a él y borrar su contenido a partir de la fila 2, ya que la 1, es el encabezado y lo tengo bloqueado con contraseña para que no se pueda modificar

No veo la solución

2 Respuestas

Respuesta
2

Adapte este ejemplo:

Private Sub btnAbrirExcel_Click()
    Dim xlApp As Excel.Application
    Dim xlWorkbook As Excel.Workbook
    Dim xlWorksheet As Excel.Worksheet
    Dim excelFilePath As String
    ' Ruta al archivo de Excel
    excelFilePath = "C:\ruta\al\archivo\archivo.xlsx"
    ' Iniciar la aplicación de Excel
    Set xlApp = New Excel.Application
    ' Abrir el archivo de Excel sin modo de lectura
    Set xlWorkbook = xlApp.Workbooks.Open(Filename:=excelFilePath, ReadOnly:=False)
    ' Seleccionar la hoja de trabajo (puede ajustarlo según sea necesario)
    Set xlWorksheet = xlWorkbook.Sheets(1)
    ' Desbloquear la hoja si es necesario
    xlWorksheet.Unprotect Password:="tuContraseña"
    ' Eliminar filas a partir de la segunda fila
    xlWorksheet.Rows("2:" & xlWorksheet.Rows.Count).Delete
    ' Volver a proteger la hoja si es necesario
    xlWorksheet.Protect Password:="tuContraseña"
    ' Guardar y cerrar el libro de trabajo
    xlWorkbook.Save
    xlWorkbook.Close
    ' Cerrar la aplicación de Excel
    xlApp.Quit
    ' Liberar memoria
    Set xlWorksheet = Nothing
    Set xlWorkbook = Nothing
    Set xlApp = Nothing
    MsgBox "El archivo de Excel ha sido actualizado correctamente.", vbInformation
End Sub

Explicación:

ExcelFilePath debe ser la ruta completa al archivo de Excel que quiere abrir.

El archivo de Excel se abre sin modo de lectura (ReadOnly:=False).

Se selecciona la primera hoja de trabajo. Si necesita trabajar con una hoja diferente, ajuste xlWorkbook. Sheets(1) según sea necesario.

La hoja de trabajo se desbloquea (si tiene protección) utilizando la contraseña especificada.

Se eliminan todas las filas a partir de la segunda fila (xlWorksheet.Rows("2:" & xlWorksheet. Rows. Count).Delete).

La hoja de trabajo se vuelve a proteger (si es necesario) y se guarda el archivo.

Asegúrese de que el archivo de Excel no esté siendo utilizado por otro proceso mientras intenta abrirlo y modificarlo. Si el archivo está en uso, es posible que no pueda abrirlo sin modo de lectura.

¡Gracias!  por su respuesta y el código.

Para asegurarme que el Excel no  trabajara en el proceso, cree un formulario aparte para aplicar su código, que he modificado un poco, ya que donde los pc que voy a utilizar no puedo cargar nuevas referencias, como seria el caso con Excel.

El Código queda de la siguiente manera y funciona perfectamente, muchas gracias.

 Private Sub btnAbrirExcel_Click()
    Dim xlApp As Object
    Dim xlWorkbook As Object
    Dim xlWorksheet As Object
    'Dim xlApp As Excel.Application
    'Dim xlWorkbook As Excel.Workbook
    'Dim xlWorksheet As Excel.Worksheet
    Dim excelFilePath As String
    ' Ruta al archivo de Excel
    excelFilePath = "C:\ruta\al\archivo\archivo.xlsx"
    ' Iniciar la aplicación de Excel
            'Set xlApp = New Excel.Application
    Set xlApp = CreateObject("Excel.Application")
    ' Abrir el archivo de Excel sin modo de lectura
    Set xlWorkbook = xlApp.Workbooks.Open(FileName:=excelFilePath, ReadOnly:=False)
    ' Seleccionar la hoja de trabajo (puede ajustarlo según sea necesario)
    Set xlWorksheet = xlWorkbook.Sheets(1)
    ' Desbloquear la hoja si es necesario
    xlWorksheet.Unprotect Password:="tuContraseña"
    ' Eliminar filas a partir de la segunda fila
    xlWorksheet.Rows("2:" & xlWorksheet.Rows.Count).ClearContents
    ' Volver a proteger la hoja si es necesario
    xlWorksheet.Protect Password:="tuContraseña"
    ' Guardar y cerrar el libro de trabajo
    xlWorkbook.Save
    xlWorkbook.Close
    ' Cerrar la aplicación de Excel
    xlApp.Quit
    ' Liberar memoria
    Set xlWorksheet = Nothing
    Set xlWorkbook = Nothing
    Set xlApp = Nothing
    MsgBox "El archivo de Excel ha sido actualizado correctamente.", vbInformation
    Application.FollowHyperlink "E:\Vademequm\Servicio.xlsx", , , False
End Sub

Me alegro haya solucionado su problema

Respuesta
1

Si se le pone una contraseña para evitar 'problemas mayores' y funciona bien impidiendo su manipulación ¿Dónde esta el problema?

La solución debería ir en la línea de leer los datos y (si se desea devolver 'otros') exportarlos a formato Excel con el mismo nombre de libro.

¡Gracias, por responder, pero creo que no has entendido el problema que planteaba y por tanto no me has dado la solución.

De todas formas, gracias por el aporte.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas