Newsgroup: it.comp.appl.access
Titolo: Ridimensionare un report  se i campi sono vuoti

Salve 
Riprendo un quesito  che è stato postato  su un altro forum nel 2013 (non da me).
 
Vorrei che in un report  siano presenti solo i campi che hanno un contenuto .
In particolare il report organizzato in colonna 
ha circa 60 campi , che andrebbero ad occupare circa 2 pagine . 
 
Di questi 60 campi  vengono  compilati  solo 20 - 30 , in modo del tutto casuale  
 
Utilizzando il sistema visualizza no  se il campo è vuoto , comunque occuperebbe 2 pagine .   
Per Accorciare il report  ai soli campi che hanno un valore 
Alex propone di  rinominare i campi in : txt1...txtn
ed applicare su formattazione del report il seguente codice .
 
    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 [nel mio caso 1 to 60]
           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 
 
Il tutto funziona egregiamente  se ad esempio  i primi 20 campi (txt1...txt20)
hanno un valore e i successivi non hanno un valore
 
Se invece  ad esempio i primi 5 hanno un valore (txt1...txt5) i successivi 5 non hanno un valore (txt6...txt10) e i restanti hanno un valore .
 
Ottengo quanto segue
txt1
txt2
txt3
txt4
txt5
txt11
spazio vuoto corrispondente (in senso verticale a :
txt6 
txt7
txt8
txt9
txt10
poi riprende da
txt12
txt13
txt14
ecc..
 
txt11 prende le coordinate di txt6 ma
Sembra che txt12 non si riposizioni verticalmente sotto txt11  
Rimane lo spazio vuoto tra txt11 e txt 12
 
Ho provato a modificare il codice senza risultato .
 
Mi sembra un'ottima soluzione ( meglio di quella di ridimensionare i controlli a 0,01 di altezza e impostare a Riducibile a si e Espandibile a si .
 
Qualcuno ha qualche idea ???
 
 


Direi che è proprio perché cicli sui prrimi 5, hai provato a farlo sui 60?
E come dai un valore a lngLeft?
 
Riccardo Baldinotti


Naturalmente  il ciclo l'ho fatto su 56  (sono questi icampi del mio report)
per brevità  ho fatto una prova su 15 campi
 
 
in un report su formattazione :
Private Sub Corpo_Format(Cancel As Integer, FormatCount As Integer)
 
Private Sub Corpo_Format(Cancel As Integer, FormatCount As Integer)
 
      Dim blPrevControlIsVisible As Boolean
          Dim lngTop As Long
          Dim lngLeft As Long
          Dim ctl As Access.Control
          Dim i As Integer
10        For i = 1 To 15
 
20            Set ctl = Me.Controls("txt" & i)
              ' se il precedente è visibile assume le coordinate top left
30            If blPrevControlIsVisible = True Then
40                ctl.Top = lngTop
50                ctl.left = lngLeft
60            End If
 
              ' se il campo è vuoto  setta il precedente a vero  lo rende non visibile
              ' memorizza lecoordinate top  left  del campo vuoto
70            If Len(ctl.Value & vbNullString) = 0 Then
80                blPrevControlIsVisible = True
90                ctl.Visible = False
100               lngTop = ctl.Top
110               lngLeft = ctl.left
                  ' se il campo non è vuoto  imposta il controllo precedente a Falso
120           Else
130               blPrevControlIsVisible = False
 
140           End If
' 150 Debug.Print "txt" & i
' 160   Debug.Print ctl
'170   If i = 15 Then Exit For
180       Next i
End Sub
togliendo  l'apostrofo alla 150 
 
Il risultato della finestra immediata è questo
txt1
txt2
txt3
txt4
txt5
txt6
txt7
txt8
txt9
txt10
txt11
txt12
txt13
txt14
txt15
txt1
txt2
txt3
txt4
txt5
txt6
txt7
txt8
txt9
txt10
txt11
txt12
txt13
txt14
txt15
txt1
txt2
txt3
txt4
txt5
txt6
txt7
txt8
txt9
txt10
txt11
txt12
txt13
txt14
txt15
txt1
txt2
txt3
txt4
txt5
txt6
txt7
txt8
txt9
txt10
txt11
txt12
txt13
txt14
txt15 
 
STARANAMENTE  CICLA 4 VOLTE 
 
SE sostituisco a debug.print "txt" & i
con 
vedi 160
debug.print ctl     
ottengo il contenuto dei primi 15 campi
Calo Visivo Progressivo;Miodesiopsie;Bruciore;
Nullo
Nullo
Nullo
Nullo
Nullo
10/10
Nullo
 2 
 2,5 
-0,75 
-1,25 
 110 
 65 
 2 
Calo Visivo Progressivo;Miodesiopsie;Bruciore;
Nullo
Nullo
Nullo
Nullo
Nullo
10/10
Nullo
 2 
 2,5 
-0,75 
-1,25 
 110 
 65 
 2 
Calo Visivo Progressivo;Miodesiopsie;Bruciore;
Nullo
Nullo
Nullo
Nullo
Nullo
10/10
Nullo
 2 
 2,5 
-0,75 
-1,25 
 110 
 65 
 2 
Calo Visivo Progressivo;Miodesiopsie;Bruciore;
Nullo
Nullo
Nullo
Nullo
Nullo
10/10
Nullo
 2 
 2,5 
-0,75 
-1,25 
 110 
 65 
 2 
 
anche qui il ciclo viene ripetuto 4 volte .
 
ho provato anche ad attivare la 170 
ma sempre il ciclo viene ripetuto 4 volte
 
Penso sia questo il motivo anche se non riesco a risolverlo