ayuda con control de informe dolor de cabeza
Los informes tienen un trato especifico (no son interactivos como si lo son los formularios) de lo que se concluye que hay que aplicar una técnica para cada uno.
Lo primero: en los INFORMES las evaluaciones y las acciones se han de hacer en la SECCION donde este el control o controles afectados (si el control esta en la cabecera ==> el código en esa sección, si esta en detalle ==> pues a esa sección … etc.)
Lo segundo: algunos tipos de objeto funcionan de forma diferente, por ejemplo los combos (y aquí parece por la definición de objetos que hay uno implicado) se comportan como cuadros de texto (un combo no es dinámicamente desplegable en un informe, se convierte en un objeto estático), ojo pues con las evaluaciones de sus contenidos.
En los informes se puede hacer visible o invisible cualquier objeto, pero eso no se aplica a su etiqueta asociada (que va por libre y necesita trato aparte), además de ello el objeto no será visible …. pero sigue ocupando su espacio, si se desea reutilizar el espacio habrá que mover controles en tiempo de ejecución para poder reutilizar el espacio que utilizaba, incluso se puede cambiar el tamaño (cero es un valor aceptado para su altura, anchura incluso para su ubicación espacial eso si: dentro de su sección).
No se debería perder de vista que (al igual que ocurre en los formularios), algunos objetos dependientes del origen de datos, pueden 'no existir' si el origen de datos no existe (caso típico: mostrar un formulario sin datos en su origen y pretender evaluar los controles, controles que ni llegan a crearse) y evaluar controles que no se crean (y por lo tanto no existen) es problemático..
Para casos como el anterior se puede acudir a la función ERROR, que evalúa el objeto aunque no exista y lo delata como inexistente (es un símil al NZ con mas poder o al clásico IIF), personalmente suelo darle preferencia a evaluar el tipo dato especifico y no al control genérico, esto es: si espero un dato numérico ==> IF IsNumeric([campo xxx]) Then ….. en lugar de IF IsError([campo xxx]) Then ….