** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - error en código de exportación de consulta a excel
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoerror en código de exportación de consulta a excel

 Responder Responder
Autor
Mensaje
carlosd Ver desplegable
Habitual
Habitual


Unido: 18/Febrero/2023
Localización: cuba
Estado: Sin conexión
Puntos: 67
Enlace directo a este mensaje Tema: error en código de exportación de consulta a excel
    Enviado: 27/Mayo/2024 a las 18:46
Saludoos amigos, tengo este código que me exporta una consulta de access a un libro de excel que tiene una plantilla:

Option Compare Database
Option Explicit
 
Private Declare PtrSafe Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _
    (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
 
Private Sub ExpProgEmit_Click()
 
    Dim rst As DAO.Recordset
    Dim XL As Object
 
    Dim miSql As String
    Dim dbs As DAO.Database
 
    Dim rutaPlantilla As String
    Dim nuevoExcel As String
    Dim vNombrePrograma As String
 
    Dim Ruta: Ruta = CurrentProject.Path: Ruta = Left(Ruta, InStrRev(Ruta, "\")) & "tmp_SGRADIO_CAPTAv1.0 EXPORTA\"
 
    vNombrePrograma = Nz(Me.NombrePrograma.Value, "")
 
    ' Crear una nueva instancia de Excel
    Set XL = CreateObject("Excel.Application")
 
    Set dbs = CurrentDb
 
    miSql = "SELECT [ProgramaEmitido].* FROM [ProgramaEmitido]"
 
    Set rst = dbs.OpenRecordset(miSql, dbOpenSnapshot)
 
    ' Asignar la ruta hasta la carpeta para el nuevo Excel
    nuevoExcel = Ruta
 
    ' Coger la ruta de la plantilla
    rutaPlantilla = Ruta & "\PLANTILLAS\PlantillaPM.xls"
 
    ' Abrir la plantilla de Excel
    Call ShellExecute(Me.hwnd, "Open", rutaPlantilla, "", "", 1)
 
    With XL
 
    .DisplayAlerts = False
    .Workbooks.Open rutaPlantilla
    .Sheets("Hoja1").Select
    .Range("A2").Select
    .ActiveCell.CopyFromRecordset rst
    .ActiveSheet.Protect Password:="190668", AllowFiltering:=True 'Proteger
    .ActiveWorkbook.SaveAs nuevoExcel & "ProdMusicalv1.0 " & DLookup("FProg", "ProgramaEmitidoFecha") & ".xls"
    .ActiveWorkbook.Close SaveChanges:=False
    .DisplayAlerts = True
    .Quit
 
    End With
 
    Dim miArchivo As Object
    Set miArchivo = GetObject(nuevoExcel & "ProdMusicalv1.0 " & DLookup("FProg", "ProgramaEmitidoFecha") & ".xls")
    miArchivo.Close SaveChanges:=False
    Set miArchivo = Nothing
 
    Dim plantilla As Object
    Set plantilla = GetObject(rutaPlantilla)
    plantilla.Close SaveChanges:=False
    Set plantilla = Nothing
 
    Set XL = Nothing
    rst.Close
    dbs.Close
    Set rst = Nothing
    Set dbs = Nothing
 
    DoCmd.Close acForm, "F_ExpPM"
 
    DoCmd.OpenForm "F_ProgramasEmitidos"
 
    MsgBox "La exportación se ha guadado en ...\SGRADIO_CAPTAv1.0\tmp_SGRADIO_CAPTAv1.0 EXPORTA", vbInformation + vbSystemModal, "Información"
End Sub

A veces me da este error:

Se ha producido el error '424' en tiempo de ejecución:
Se requiere un objeto.

en esta línea: 
Set miArchivo = GetObject(nuevoExcel & "ProdMusicalv1.0 " & vNombrePrograma & ".xls")

Si lo restablezco y vuelvo a ejecutar me da este error entonces:

Se ha producido el error '-2147417848 (80010108)' en tiempo de ejecución:
Error de automatización

en esta línea:
 miArchivo.Close SaveChanges:=True

Por mucho que he revisado no encuentro la razón y mis conocimientos no son muy extensos. Cualquier ayuda la agredezco























Editado por carlosd - 27/Mayo/2024 a las 18:47
Arriba
Mihura Ver desplegable
Administrador
Administrador
Avatar

Unido: 06/Mayo/2005
Localización: En la dehesa
Estado: Sin conexión
Puntos: 14428
Enlace directo a este mensaje Enviado: 27/Mayo/2024 a las 19:24
Hola Carlos:

Esto te sobra:
 
    ' Abrir la plantilla de Excel
    Call ShellExecute(Me.hwnd, "Open", rutaPlantilla, "", "", 1)




Y esto también:

    Dim miArchivo As Object
    Set miArchivo = GetObject(nuevoExcel & "ProdMusicalv1.0 " & DLookup("FProg", "ProgramaEmitidoFecha") & ".xls")
    miArchivo.Close SaveChanges:=False
    Set miArchivo = Nothing
 
    Dim plantilla As Object
    Set plantilla = GetObject(rutaPlantilla)
    plantilla.Close SaveChanges:=False
    Set plantilla = Nothing

No he analizado el resto, pero tiene buena pinta.


Jesús Mansilla Castells.
Saludos desde Móstoles.

Access Aplicaciones
Tecsys.es
Arriba
carlosd Ver desplegable
Habitual
Habitual


Unido: 18/Febrero/2023
Localización: cuba
Estado: Sin conexión
Puntos: 67
Enlace directo a este mensaje Enviado: 27/Mayo/2024 a las 20:09
gracias por la ayuda Maestro, lo probé vaias veces y no me dió el erro nuevamente
Arriba
Mihura Ver desplegable
Administrador
Administrador
Avatar

Unido: 06/Mayo/2005
Localización: En la dehesa
Estado: Sin conexión
Puntos: 14428
Enlace directo a este mensaje Enviado: 27/Mayo/2024 a las 20:16
No te puede dar el mismo error, porque esa sentencia deberías haberla eliminado  LOL ... postea el código tal cual lo tienes ahora mismo.


Jesús Mansilla Castells.
Saludos desde Móstoles.

Access Aplicaciones
Tecsys.es
Arriba
carlosd Ver desplegable
Habitual
Habitual


Unido: 18/Febrero/2023
Localización: cuba
Estado: Sin conexión
Puntos: 67
Enlace directo a este mensaje Enviado: 27/Mayo/2024 a las 20:23
yo le dje que no me había dado el error después de comentar esas líneas, no que ma había dado el error, de todas formas ahí va

Private Sub ExpProgEmit_Click()

    Dim rst As DAO.Recordset
    Dim XL As Object
    
    Dim miSql As String
    Dim dbs As DAO.Database

    Dim rutaPlantilla As String
    Dim nuevoExcel As String
    Dim vNombrePrograma As String
    
    Dim Ruta: Ruta = CurrentProject.Path: Ruta = Left(Ruta, InStrRev(Ruta, "\")) & "tmp_SGRADIO_CAPTAv1.0 EXPORTA\"

    vNombrePrograma = Nz(Me.NombrePrograma.Value, "")

    ' Crear una nueva instancia de Excel
    Set XL = CreateObject("Excel.Application")
    
    Set dbs = CurrentDb

    miSql = "SELECT [ProgramaEmitido].* FROM [ProgramaEmitido]"
    
    Set rst = dbs.OpenRecordset(miSql, dbOpenSnapshot)

    ' Asignar la ruta hasta la carpeta para el nuevo Excel
    nuevoExcel = Ruta
    
    ' Coger la ruta de la plantilla
    rutaPlantilla = Ruta & "\PLANTILLAS\PlantillaTI.xls"

    ' Abrir la plantilla de Excel
    'Call ShellExecute(Me.hwnd, "Open", rutaPlantilla, "", "", 1)

    With XL
    
    .DisplayAlerts = False
    .Workbooks.Open rutaPlantilla
    .Sheets("Hoja1").Select
    .Range("A2").Select
    .ActiveCell.CopyFromRecordset rst
    .ActiveSheet.Protect Password:="Carlos1906*2023", AllowFiltering:=True 'Proteger
    .ActiveWorkbook.SaveAs nuevoExcel & "ProdMusicalv1.0 " & vNombrePrograma & ".xls"
    .ActiveWorkbook.Close SaveChanges:=False
    .DisplayAlerts = True
    .Quit
    
    End With
    
    'Dim miArchivo As Object
    'Set miArchivo = GetObject(nuevoExcel & "ProdMusicalv1 " & vNombrePrograma & ".xls")
    'miArchivo.Close SaveChanges:=True
    'Set miArchivo = Nothing
    
    'Dim plantilla As Object
    'Set plantilla = GetObject(rutaPlantilla)
    'plantilla.Close SaveChanges:=False
    'Set plantilla = Nothing
    
    Set XL = Nothing
    rst.Close
    dbs.Close
    Set rst = Nothing
    Set dbs = Nothing
    
    DoCmd.Close acForm, "F_ExpPM"
    
    DoCmd.OpenForm "F_ProgramasEmitidos"
    
    MsgBox "La exportación se ha guadado en ...\SGRADIO_CAPTAv1.0\tmp_SGRADIO_CAPTAv1.0 EXPORTA", vbInformation + vbSystemModal, "Información"
End Sub
Arriba
Mihura Ver desplegable
Administrador
Administrador
Avatar

Unido: 06/Mayo/2005
Localización: En la dehesa
Estado: Sin conexión
Puntos: 14428
Enlace directo a este mensaje Enviado: 27/Mayo/2024 a las 20:28
Perdón ... entendí lo contrario de lo que escribiste.
Ouch

Necesito vacaciones .... LOL

Cierro el hilo.
Jesús Mansilla Castells.
Saludos desde Móstoles.

Access Aplicaciones
Tecsys.es
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable