Access - Exportar resultados de consulta mediante subforma

 
Vista:
sin imagen de perfil

Exportar resultados de consulta mediante subforma

Publicado por jesus (1 intervención) el 08/03/2023 14:41:14
Saludos,

Estoy creando una funciona ExportarExcel2() para intentar exportar los datos de una consulta insertada en un formulario de nombre CONSULTES_EXPLOTACIO, sin lanzar de nuevo la consulta, ja que el volument de datos es muy grande y es duplicar el proceso y la lentitud de la accion. Els subformulario que contiene la consulta se llama SUBOBJECTESFORM. El codigo es el siguiente:

Function ExportarExcel_2()
Dim appExcel As Object
Dim wb As Object
Dim ws As Object
Dim rst As DAO.Recordset
Dim intColumna As Integer

'Crea una nueva instancia de Excel
Set appExcel = CreateObject("Excel.Application")
appExcel.Visible = True

'Crea un nuevo libro de Excel
Set wb = appExcel.Workbooks.Add

'Selecciona la hoja activa del libro de Excel
Set ws = wb.ActiveSheet

'Obtiene los datos del subformulario y los guarda en un Recordset
Set rst = Consultes_Explotacio!SubObjectesForm.Form.RecordsetClone

'Agrega los nombres de las columnas del subformulario a la primera fila del libro de Excel
For intColumna = 0 To rst.Fields.Count - 1
ws.Cells(1, intColumna + 1).Value = rst.Fields(intColumna).Name
Next intColumna

'Agrega los datos del subformulario a las filas del libro de Excel
ws.Range("A2").CopyFromRecordset rst

'Libera la memoria utilizada por el Recordset
rst.Close
Set rst = Nothing

'Guarda y cierra el libro de Excel
'wb.SaveAs "C:\Ruta\Archivo.xlsx"
'wb.Close

'Libera la memoria utilizada por las variables
Set ws = Nothing
Set wb = Nothing
Set appExcel = Nothing
End Function

El problema esta siempre en la llamada al subformulario, no encuentra el objeto, lo he resaltado en negrita. Lo tengo que abrir primero, y esto es lo que no entiendo, si ya esta abierto el formulario principal que contiene el subformulario con los datos de la consulta, porque no encuentra el objeto. Si lo vuelvo a abrir es como relanzar la consulta, acaba siendo muy lento. Muchas gracias por todo.
Buscando crecer en el nuevo mundo que me ha tocado como batalla en la actualidad.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Exportar resultados de consulta mediante subforma

Publicado por Anonimo (3316 intervenciones) el 08/03/2023 18:55:55
Una pregunta:

Siendo el RecordsetClone de un formulario un recordset ¿porque una copia que (por lo publicado) es muy 'cara' en recursos?

La función es independiente, por lo que lo adecuado es que la ruta sea absoluta

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
Function ExportarExcel_2()
Dim appExcel As Object, wb As Object, ws As Object, intColumna As Integer
 
'Crea una nueva instancia de Excel
Set appExcel = CreateObject("Excel.Application")
appExcel.Visible = True
 
'Crea un nuevo libro de Excel
Set wb = appExcel.Workbooks.Add
 
'Selecciona la hoja activa del libro de Excel
Set ws = wb.ActiveSheet
 
'Obtiene los datos del subformulario y los guarda en un Recordset
With Forms.Consultes_Explotacio!SubObjectesForm.Form.RecordsetClone
 
'Agrega los nombres de las columnas del subformulario a la primera fila del libro de Excel
For intColumna = 0 To .Fields.Count - 1
ws.Cells(1, intColumna + 1).Value = .Fields(intColumna).Name
Next intColumna
 
'Agrega los datos del subformulario a las filas del libro de Excel
ws.Range("A2").CopyFromRecordset Forms.Consultes_Explotacio!SubObjectesForm.Form.RecordsetClone
End With
 
'Guarda y cierra el libro de Excel
'wb.SaveAs "C:\Ruta\Archivo.xlsx"
'wb.Close
 
'Libera la memoria utilizada por las variables
Set ws = Nothing
Set wb = Nothing
Set appExcel = Nothing
End Function

Es el código publicado, únicamente se elimino el recordset (copia de una copia) y se utiliza la ruta absoluta del formulario con los datos a exportar

Y se debería verificar que el formulario esta abierto (cerrado 'no existe'), dado que es indispensable que este abierto ¿Porqué no se guarda el procedimiento en el propio formulario como un Sub?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar