Access - Boton para exportar a excel

 
Vista:
sin imagen de perfil

Boton para exportar a excel

Publicado por Pablo (13 intervenciones) el 30/03/2017 14:05:53
Buenos días,

tengo el siguiente formulario en el que se pueden aplicar varios filtros y exportar a excel

adjunto imagen

Sin-titulo

el código que tengo es el siguiente

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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
Option Compare Database
Option Explicit
 
Private Sub BT_APLICAR_FILTROS_Click()
    ' Creamos la variable que contendrá el filtro
    Dim sFiltro As String
 
    ' Asignamos el filtro a la variable
    sFiltro = "ENVIADAS LIKE'" & Me.DESPLEGABLE_ENVIADAS & "'"
 
 
    ' Asignamos la varaible a la propiedad Filter del subformulario
    Me.BusquedaSubFormulario.Form.Filter = sFiltro
 
    ' Le decimos al subformulario que active el filtro
    ' que previamente hemos asignado.
    Me.BusquedaSubFormulario.Form.FilterOn = True
End Sub
 
Private Sub BT_EXPORTAR_A_EXCEL_Click()
On Error GoTo Err_BT_EXPORTAR_A_EXCEL_Click
 
Dim stDocName As String
Dim stRutaYArch As String
 
stDocName = "SUBrecambios1"
stRutaYArch = CurrentProject.Path & "\ArchivoExcel.xls"
 
'Abro el subformulario filtrado por el campo vinculado del formulario pero no visible
DoCmd.OpenForm stDocName, acPreview, , "[ENVIADAS] ='" & Forms!SUBrecambios!DESPLEGABLE_ENVIADAS.Value & "'", , acHidden
 
'Exporto el subformulario al archivo de Excel
DoCmd.OutputTo acOutputForm, stDocName, "MicrosoftExcel(*.xls)", stRutaYArch, True
'Cierro el subformulario abierto sin guardar
DoCmd.Close acForm, stDocName, acSaveNo
Exit_BT_EXPORTAR_A_EXCEL_Click:
Exit Sub
 
Err_BT_EXPORTAR_A_EXCEL_Click:
MsgBox Err.Description
Resume Exit_BT_EXPORTAR_A_EXCEL_Click
 
End Sub
 
Private Sub BT_QUITAR_FILTROS_Click()
 
    'Para eliminar el filtro lo dejamos en blanco con ""
    Me.BusquedaSubFormulario.Form.Filter = ""
 
    'A continuación desactivamos el filtro
    Me.BusquedaSubFormulario.Form.FilterOn = False
 
    'Y para rematar, el cuadro de texto del formulario
    'lo ponemos en blanco para que podamos filtrar por
    'otro término, esto ya es opcional.
    Me.DESPLEGABLE_ENVIADAS = ""
End Sub

Mis preguntas son las siguientes,

1. podrías indicarme como hacer para que se apliquen los 3 filtros a la vez, actualmente solo esta habilitado el primero.

2. Al pulsar el botón "exportar a excel" me gustaría realizar una consulta que actualice el campo ENVIADO de no enviado a enviado solo las filas que se muestran en el subformulario es decir aplicando los filtros.

Muchas gracias,

Un saludo.
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
Imágen de perfil de Norberto
Val: 1.094
Oro
Ha mantenido su posición en Access (en relación al último mes)
Gráfica de Access

Boton para exportar a excel

Publicado por Norberto (753 intervenciones) el 30/03/2017 15:13:49
Hola.

Vamos por partes:

1
2
3
4
5
6
7
8
9
10
...
    ' Asignamos el filtro a la variable
    sFiltro = "ENVIADAS = '" & Me.DESPLEGABLE_ENVIADAS & "'" 'Olvídate del LIKE en este caso
    If Me.DESPLEGABLE_CIUDAD <> "TODAS" Then
        sFiltro = sFiltro & " And CIUDAD = '" & Me.DESPLEGABLE_CIUDAD & "'"
    End If
    If Me.DESPLEGABLE_CRITICIDAD <> "TODAS" Then
        sFiltro = sFiltro & " And CRITICIDAD = '" & Me.DESPLEGABLE_CRITICIDAD & "'"
    End If
...

Se supone que el filtro se guarda en la propiedad Filter del Subformulario y que debería de funcionar lo siguiente:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
...
    Dim sSQL As String, sFiltro As String
 
    sFiltro = Me.BusquedaSubFormulario.Form.Filter  'Leemos el filtro del subformulario
 
    'Aquí pones el código que usas para exportar poniendo sFiltro como parámetro Filter
    'del comando OpenForm
    '...
    '...
 
    'Y continúas con esto para actualizar la tabla cuyo nombre no sé y a la que llamaré tEnvíos
    If sFiltro <> "" Then   'Hay filtro
        sSQL = "UPDATE [tEnvíos] SET [Enviado] = 'ENVIADO' WHERE " & sFiltro
        DoCmd.SetWarnings False 'Para que no te pregunte si deseas actualizar, bla, bla, bla
        DoCmd.RunSQL sSQL       'Para ejecutar la consulta de actualización
        DoCmd.SetWarnings True  'Para dejarlo como estaba
    End If
...

Un saludo,

Norberto.

P.S. Esto es lo que dice Microsoft sobre las consultas de actualización :

Important

• UPDATE does not generate a result set. Also, after you update records using an update query, you cannot undo the operation. If you want to know which records were updated, first examine the results of a select query that uses the same criteria, and then run the update query.
• Maintain backup copies of your data at all times. If you update the wrong records, you can retrieve them from your backup copies.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Boton para exportar a excel

Publicado por Pablo (13 intervenciones) el 30/03/2017 16:04:46
Gracias Noberto

Solo me falta aplicar la parte de la actualización que no me ha quedado muy claro ( mi tabla se llama recambios )

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Private Sub BT_EXPORTAR_A_EXCEL_Click()
On Error GoTo Err_BT_EXPORTAR_A_EXCEL_Click
 
Dim stDocName As String
Dim stRutaYArch As String
 
stDocName = "SUBrecambios1"
stRutaYArch = CurrentProject.Path & "\ArchivoExcel.xls"
 
'Abro el subformulario filtrado por el campo vinculado del formulario pero no visible
DoCmd.OpenForm stDocName, acPreview, , "[ENVIADAS] ='" & Forms!SUBrecambios!DESPLEGABLE_ENVIADAS.Value & "'", , acHidden
 
'Exporto el subformulario al archivo de Excel
DoCmd.OutputTo acOutputForm, stDocName, "MicrosoftExcel(*.xls)", stRutaYArch, True
'Cierro el subformulario abierto sin guardar
DoCmd.Close acForm, stDocName, acSaveNo
Exit_BT_EXPORTAR_A_EXCEL_Click:
Exit Sub
 
Err_BT_EXPORTAR_A_EXCEL_Click:
MsgBox Err.Description
Resume Exit_BT_EXPORTAR_A_EXCEL_Click
 
End Sub


Y me ha surgido una dudilla mas

1
2
3
4
5
6
7
8
9
If Me.DESPLEGABLE_ENVIADAS <> "TODAS" Then
         sFiltro = "ENVIADAS = '" & Me.DESPLEGABLE_ENVIADAS & "'"
    End If
    If Me.DESPLEGABLE_CIUDAD <> "TODAS" Then
        sFiltro = sFiltro & " And STAB_PETICIÓN = '" & Me.DESPLEGABLE_CIUDAD & "'"
    End If
    If Me.DESPLEGABLE_CRITICIDAD <> "TODAS" Then
        sFiltro = sFiltro & " And CRITICIDAD = '" & Me.DESPLEGABLE_CRITICIDAD & "'"
    End If

en el DESPLEGABLE_CIUDAD se ven Madrid, Barcelona, Valencia pero en la BBDD esto se almacena en códigos siendo para Madrid="4672", Barcelona ="3804" Valencia ="2815" entoces no encuentra ningún registro al filtrar. Como puedo aplicar este pequeño cambio para que detecte:

Me.DESPLEGABLE_CIUDAD (madrid) como 4672

MUchas Gracias
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
Imágen de perfil de Norberto
Val: 1.094
Oro
Ha mantenido su posición en Access (en relación al último mes)
Gráfica de Access

Boton para exportar a excel

Publicado por Norberto (753 intervenciones) el 31/03/2017 09:03:48
Hola de nuevo.

Si en la tabla se almacenan las ciudades por medio de códigos, lo que tienes que hacer es que el origen de la fila del desplegable sea código y nombre.

Si el tipo de origen de la fila es Tabla/Consulta, el origen sería una consulta en la que colocas los dos campos. Si el tipo es Lista de valores, ésta debería contener 4672;"Madrid";3804;"Barcelona";2815;"Bilbao". En todo caso, la propiedad Número de columnas debes de ponerla en 2 y Ancho de columna a 0 cm para que se oculte el código. De esta manera, se visualiza el nombre de la ciudad, pero se almacena el código y, cuando se aplica el filtro, se usa este en la comparación con el contenido del campo de la tabla.

En cuanto a la actualización, la línea 30 de tu procedimiento muestra
1
DoCmd.OpenForm stDocName, acPreview, , "[ENVIADAS] ='" & Forms!SUBrecambios!DESPLEGABLE_ENVIADAS.Value & "'", , acHidden

lo que hace que se abra el nuevo formulario sin tener en cuenta nada más que el estado del combo DESPLEGABLE_ENVIADAS y no tiene en cuenta las otras dos condiciones.

En el ejemplo que te pongo yo, en la línea 4

1
sFiltro = Me.BusquedaSubFormulario.Form.Filter  'Leemos el filtro del subformulario

leemos a la variable sFiltro el filtro que está aplicado en el subformulario que muestra los resultados de la consulta. Si luego abres el formulario de exportación con

1
DoCmd.OpenForm stDocName, acPreview, , sFiltro

los registros que se van a exportar corresponden a los que cumplen las tres condiciones que has indicado a través de los combos.

Una vez exportados lo único que tienes que hacer es añadir en tu procedimiento las líneas 12 a 17, sustituyendo tEnvíos por Recambios

1
2
3
4
5
6
If sFiltro <> "" Then   'Hay filtro
        sSQL = "UPDATE [Recambios] SET [Enviado] = 'ENVIADO' WHERE " & sFiltro
        DoCmd.SetWarnings False 'Para que no te pregunte si deseas actualizar, bla, bla, bla
        DoCmd.RunSQL sSQL       'Para ejecutar la consulta de actualización
        DoCmd.SetWarnings True  'Para dejarlo como estaba
    End If

para que se actualice en campo Enviado.

Espero haber sido del todo claro y es que cuando uno sabe algo, todo le parece fácil.

Un saludo,

Norberto.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Boton para exportar a excel

Publicado por Pablo (13 intervenciones) el 31/03/2017 10:46:35
Funciono perfecto, muchas gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar