Hola a todos. Necesitaría saber si existe alguna manera fácil o rápida para poder esconder unos campos en un informe y mover otros para que ocupen la posición de los escondidos. Se que utilizando la propiedad Top los podría desplazar, pero si son muchos, ¿como puedo hacerlo de manera que no tenga que ir uno por uno cambiando el valor de su Top?. Además, si tengo el siguiente ejemplo: Campo1 Campo2 Campo3 Campo4 Campo5 y escondo el Campo2 y el Campo4, la posición del Campo3 debería subir hasta ocupar la posición del Campo2 y el Campo5 debería subir hasta ocupar la posición del Campo3. ¿Se entiende? Muchas gracias por vuestra atención. RESPONDE JUAN M. AFAN DE RIBERA ================================ suponiendo que los controles que necesitas esconder y mover se llamen todos como el ejemplo que pones (campo1, campo2, etc) y que sean cuadros de texto, podríamos poner este código en el evento Al dar formato de la sección donde estén los controles (me imagino que en la sección detalle). En prinicipio lo que hace es construir una matriz que albergará el nombre y la propiedad Top de todos los controles que cumplan las características que tú le digas (tipo cuadro de texto y que empiecen por la palabra "campo", por ejemplo). Después, en un segundo bucle se asigna la propiedad Top almacenada en la matriz sólo a los controles que cumplan las condiciones, y a los otros se les hace invisibles. Por ejemplo: Private Sub Detalle_Format(Cancel As Integer, FormatCount As Integer) Dim controlesInforme() Dim numControles As Integer Dim i As Integer, cnt As Integer Dim ctl As Control Static numFormatos As Integer 'comprobamos que sólo se haga una vez If numFormatos = 0 Then 'construimos matriz con nombres y propiedad top 'de los controles necesitados For Each ctl In Me.Controls If ctl.ControlType = acTextBox And Left(ctl.Name, 5) = "campo" Then ReDim Preserve controlesInforme(1, i) controlesInforme(0, i) = ctl.Name controlesInforme(1, i) = ctl.Top i = i + 1 End If Next numControles = i - 1 For i = 0 To numControles Set ctl = Me.Controls(controlesInforme(0, i)) 'si el valor no es el que se quiere mostrar... If ctl.Value = "x" Then 'hacemos el control invisible 'pero no rotamos el contador de la matriz ctl.Visible = False Else 'si el valor es correcto se le asigna 'la siguiente propiedad Top de la matriz ctl.Top = controlesInforme(1, cnt) 'y avanzamos el contador de la matriz cnt = cnt + 1 End If Set ctl = Nothing Next numFormatos = 1 End If End Sub A ver si esta vez te sirve. Si tienes dudas coméntalas. -- Saludos desde Barcelona Juan M. Afan de Ribera [MVP - Ms Access