Ejecutar evento al cargar form vba access

Quiero exportar haciendo un click, un formulario que contiene varios filtros. El tema es que he conseguido mediante el evento click de un botón, que me exporte un archivo, aplicar filtro mediante "Me.Form.Filter" y posteriormente que me exporte otro y así sucesivamente, extrayendo un total de ocho. Me funciona perfectamente cuando el código está en el evento Bot_exportar_pdf_Click() del botón dentro del formulario, pero en cambio si lo quiero ejecutar automáticamente, una vez abierto el formulario desde otro formulario que hace de menú principal, me marca error: "2585" en el "DoCmd.OutputTo". He probado varios estados del form load, current, activate... Pero no hay manera. Creo que se debe a que abro el form mediante vba utilizando "DoCmd.OpenForm "frmVerCuadro_3"". Lo he probado en lugar de código, por macro, pero pasa exactamente lo mismo. ¿Sabéis qué puede ser?

1 respuesta

Respuesta
1

Vamos por partes. Es una opinión personal. No me gustan los filtros. Ya que vas a abrir un formulario Clientes desde otro, al que llamaremos Principal, ¿por qué no le pones los criterios que quieras en la instrucción de abrir el formulario?. Por ejemplo

Docmd.openform"clientes",,,"Pais=""España"" and ciudad=""Madrid"" and colorojos=""Azul"""

O si los criterios los eliges desde, por ejemplo, combinados

docmd.openform"Clientes",,,"pais ='" & me.elegirpais & "' and ciudad='" & me.elegirciudad & "'"

De forma que cuando se abra el formulario Clientes, ya lo hace sólo con los registros que cumplan esas condiciones.

Mira si tengo una carpeta llamada Clientes España, y un formulario 1 con un botón

Cuando hago clic sobre el botón, me abre el formulario Clientes sólo con esos registros.

Y en éste le digo que en el evento Al abrir

Private Sub Form_Load()
Me.TimerInterval = 1000
End Sub

 Es decir, que el intervalo de cronómetro sea de un segundo, entre que se abre y "empieza" a trabajar.

Y en el evento Al cronometro le tengo puesto

Private Sub Form_Timer()
On Error Resume Next
Dim i As Byte
DoCmd.GoToRecord , , acFirst
For i = 1 To Me.Recordset.RecordCount
DoCmd.OpenReport "clientes", acPreview, , "idcliente=" & Me.IdCliente & ""
DoCmd.OutputTo acOutputReport, "clientes", "PDFFormat(*.pdf)", "C:\users\gonza\documents\borrar\clientesespaña\" & NombreCliente & ".pdf"
DoCmd.Close acReport, "clientes"
DoCmd.GoToRecord , , acNext
Next
Me.TimerInterval = 0
End Sub

Es decir, que vaya al primer registro y exporte el informe con ese nombre de cliente a la carpeta ClientesEspaña. Cierre el informe, se vaya al siguiente registro, lo mismo, etc y que cuando termine de hacerlo, el intervalo sea 0, para que no siga trabajando, de forma que

Lo he puesto en PDF como se podría poner en cualquier otro formato.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas