Problemas con el código VBA de Access

Me descargué una plantilla de access de la página de microsoft para llevar las incidencias de mi empresa. He estado modificando el archivo ligeramente para personalizarlo un poco, pero ese no es el problema porque parte de la misma plantilla, ya que me lo he vuelto a descargar para hacer la prueba y no funciona.

El problema radica en que cuando selecciono alguna incidencia del formulario "Issue Details" para imprimir, no me selecciona el informe correspondiente al seleccionado. Simplemente siempre me sale la primera incidencia. He probado el informe con Origen de registro - tres puntos - ID - [Formularios]![Issue Details]![ID], pero me sale error todo el rato. Si alguien le puede echar un vistazo y resolverme la duda, lo agradecería enormemente ya que no puedo imprimir las incidencias por este motivo. Muchas gracias.

Os dejo el enlace de descarga de la plantilla en la que he estado trabajando y donde también ocurre este problema por si alguien puede echarle un vistazo: https://omextemplates.content.office.net/support/templates/en-us/tf01225348.accdt

Respuesta
1

La aplicación lamentablemente SI tiene código que revisar y el problema está en la macro, pruebe adicionando este código en un nuevo botón, le asigné el nombre btnImprimir.

Private Sub btnImprimir_Click()
 If IsNull(Me.ID) Then
    Exit Sub
 End If
 DoCmd.OpenReport "Issue Details", acViewPreview, , "[ID]=" & Me.ID, acNormal
End Sub

Lo probé y me funciona. El problema está en que la macro no está asignando Me que debe asignarse por la propiedad Application.CodeContextObject, es decir, el nombre del formulario. 

¡Muchísimas gracias, Eduardo! ¡Me ha funcionado perfectamente! Ahora puedo ver los informes acorde a los registros del formulario. ¡Un abrazo!

Gracias, se debe informar a Microsoft del error.

1 respuesta más de otro experto

Respuesta

Esa aplicación no tiene código que revisar que pueda dar problemas (ni tampoco datos de muestra), si lo que se desea es ver (en el informe) un único registro habrá que condicionar el informe y las condiciones se generan a base de comparaciones (normalmente igualdades).

Lo ideal es crear una macro (en futuras ampliaciones se pueden convertir las macros a funciones de VBA) en ella se puede condicionar que 'un campo del informe' (normalmente el ID) sea igual a un elemento externo (el campo ID del registro activo de un formulario).

Si solo se le indica el elemento externo sin indicar con que elemento del informe se ha de comparar, lo mas normal es que ignore la condición y (por defecto) tome el primer elemento del conjunto.

Crear una macro es sencillo (solo hay que seleccionar la acción y rellenar los datos que solicita), si mas tarde (o una vez que funcione) se convierte la macro a VBA (hay una opción para ello) se podrá utilizar en lugar de la macro o copiar el contexto y pegarlo en un botón o acción para poder borrar la macro.

Hola Enrique! muchas gracias por contestar a mi duda. Puede ser que no me explicara bien porque Microsoft access no es algo que maneje de manera habitual, solo para algunas cosas puntuales para grabar datos de mi empresa. Te comento, lo que me sucede es que al meter los datos y al generar nuevos registros, si yo quiero ver el informe del registro 6, el informe siempre me sale con el informe 1. Y si de nuevo lo cambio al registro 2, me sigue saliendo el registro 1. Es decir, no cambia. Yo lo que quiero es que al seleccionar un registro me salga ese mismo en el informe y no el primero constantemente. Como decía en mi mensaje anterior, había probado a hacerlo con [Formularios]![Issue Details]![ID] pero si meto esto en Origen de registro dentro de las propiedades del informe, después me salen distintos tipos de códigos de error. Qué desastre... Muchas gracias de antemano.

Para que seleccione un registro concreto hay que indicarle el campo en el que buscar.

 [Formularios]![Issue Details]![ID] ==> la referencia a localizar
[ID] ==> objeto del informe que interviene en la condición

La expresión  a utilizar en el apartado  'Condicion WHERE' debería parecerse a esta:
[ID] =  [Formularios]![Issue Details]![ID] 

No hay error que reportar a Microsoft, Me. solo es valido en VBA.

En las macros ==> es el objeto en que se aplicara la macro
El informe es un dato requerido y (su nombre) se selecciona en el desplegable.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas