Immaginavo fosse una cosa simile... certo la tua spiegazione è decisamente FUORVIANTE, oltretutto la mia osservazione della LABEL CONNESSA è sempre valida, cosa che non hai capito forse....!!!
Per ottenere quello che vuoi devi creare un CICLO sui controlli(DataBound ovvero quelli con Origine Controllo) contenuti nel CORPO, se, la proprietà VALUE dei controlli corrisponde al Null o NullString allora non solo devi renderli VISIBILE=FALSE, ma devi memorizzarne le coordinate per spostare il controllo SUCCESSIVO sovrapponendolo a quello NON VISIBILE...
Questo lavoro è "RELATIVAMENTE" semplice..., il relativamente è legato a quanto sai gestire il modello oggetti del Report da VBA.
Mio suggerimento è di inserire nella Proprietà TAG dei controlli da GESTIRE un Char di riconoscimento, ad esempio "X"...!
A quel punto fai un ciclo così
Dim blPrevControlIsVisible As Boolean
Dim lngTop as Long
Dim lngLeft as Long
Dim ctl As Access.Control
For each ctl in Me.Controls
If ctl.TAG="X" Then
If blPrevControlIsVisible =True then
ctl.Top=lngTop
ctl.Left=lngLeft
End if
If Len(ctl.value & vbNullstring)=0 Then
blPrevControlIsVisible=true
ctl.Visible=False
lngTop=ctl.Top
lngLeft=ctl.Left
Else
blPrevControlIsVisible =False
End if
Next
Devi tuttavia fare ATTENZIONE a come disponi i controlli in fase di DISEGNO... se non li generi in modo sequenziale il CICLO non avrà la progressione corretta...!
Per ovviare a questo la soluzione potrebbe essere di assegnare come NOME dei controlli(TextBox o quelli DataBound) un nome con progressivo... ad esempio:
txt1
txt2
txt3
...
A quel punto, la TAG "X" non servirebbe più ed il ciclo sarebbe sempre funzionante modificato in questo modo:
Dim blPrevControlIsVisible As Boolean
Dim lngTop as Long
Dim lngLeft as Long
Dim ctl As Access.Control
Dim i As Integer
For i=1 to 5 ' Ipotiziamo siano fino a txt5
Set ctl=Me.Controls("txt" & i)
If blPrevControlIsVisible =True then
ctl.Top=lngTop
ctl.Left=lngLeft
End if
If Len(ctl.value & vbNullstring)=0 Then
blPrevControlIsVisible=true
ctl.Visible=False
lngTop=ctl.Top
lngLeft=ctl.Left
Else
blPrevControlIsVisible =False
End if
Next
Fai tu le tue opportune verifiche e valutazioni, il codice proposto NON è testato, ma scritto a braccio solo per darti una strada utile...