Machera continua con numero righe variabili

di il
39 risposte

Machera continua con numero righe variabili

Buongiorno,

è possibile in una sotto maschera di tipo continuo con numero di righe sempre diverse, e con una piè di pagina  in cui calcolo i totali di vari textbox , fare in modo che non ci sia spazio tra i dati contenuti nel corpo maschera ed il piè di pagina ?

grazie 

39 Risposte

  • Re: Machera continua con numero righe variabili

    05/05/2025 - Scolaretto ha scritto:

    fare in modo che non ci sia spazio tra i dati contenuti nel corpo maschera ed il piè di pagina ?

    Ciao,

    per capire meglio .... potresti fare uno screenshot della struttura ?   grazie

  • Re: Machera continua con numero righe variabili

  • Re: Machera continua con numero righe variabili

    No il risultato finale ... ma la struttura (in progettazione)

    Se non si vede come hai impostato in Design la form principale con la sub form , diventa difficile darti indicazioni utili.

  • Re: Machera continua con numero righe variabili

    Vediamo se ho capito

    questo il comando dalla maschera principale per aprire la sottoto maschera

    DoCmd.OpenForm "I_ElencoMovimenti", acNormal, , "Iddossier=" & Me.IdDossier, acFormEdit, acWindowNormal, "dossier"

     Grazie 

  • Re: Machera continua con numero righe variabili

    Non hai capito.... queste sono le proprietà  ;-)  ....mi fai piegare in due dal ridere....

    Volevo vedere la Struttura della Form ... hai presente quando apri in struttura per disegnare la form ?   ;-))
    Comunque ho già preparato la soluzione ... ma prima di darti delle dritte volevo capire come hai impostato la struttura della form e sub form ;-)

    Tu vuoi ottenere una cosa di questo tipo, dove il Piè Pagina della SubForm si ridimensiona secondo il numero di records da visualizzare ?

  • Re: Machera continua con numero righe variabili

    Yes 

    Come dicono a roma son de coccio

    Grazie

    form

    subform

  • Re: Machera continua con numero righe variabili

    Ok ;-)  .... quindi ... certo che si !   si può fare!

    Allora ti ci vuole na'cosa così ?

    IN QUESTO MODO :

    OPPURE COSI' :

  • Re: Machera continua con numero righe variabili

    Primo caso . 

  • Re: Machera continua con numero righe variabili

    05/05/2025 - Scolaretto ha scritto:

    Primo caso . 

    Ok,

    Si tratta di ridimensionare nella Form le dimensioni della SubForm (le dimensioni della Finestra che contiene laSubForm... una moltiplicazionee due o tre somme)

    Pertanto costruisci normalmente la SubForm. In questo oggetto non devi fare nulla di particolare.
    Poi nella Form dove inserisci la SubForm, dimensioni a tuo piacimento la finestra della SubForm.

    Adesso devi fare alcuni calcoli, poi successivamente li andrai a perfezionare provando la Form con la sua SubForm.

    Nella SubForm devi calcolare

    1. Le dimensioni in ALTEZZA che occupano la Testata, il Corpo e il PièPagina
      (puoi tranquillamente trovare tali valori nelle Proprietà delle tre sezioni)
    2. Devi determinare,ogni volta che aggiorni i dati nella SubForm, il numero di records (righe) che contiene
    3. Poi stabilisci le dimensioni in ALTEZZA minime e massime che avrà la finestra della SubForm, in modo da non superare un certo limite sia in basso che in alto 

    .
    Mettendo insieme questi valori, trovi l'altezza che deve avere la Finestra della SubForm, e andrai ad aggiornare la proprietà :
    Esempio ...   Me.MySubForm.Height = YourHeightCalculate

    Metti queste istruzioni in una Sub che richiamerai ogni volta che la SubForm viene aggiornata con i records da visualizzare.

    Fatto !!! ... molto semplice e veloce.

    Prova a provare e fai sapere a che punto arrivi ;-)

  • Re: Machera continua con numero righe variabili

    Hai fatto ???

    dai, ti faccio vedere come ho fatto, devi solo verificare le Altezze, come ti ho spiegato sopra, nella parte di codice :

        ' Set Values in twip -> 1 cm = approximately 567 twip
        heightRow = 310             ' row height
        heightExtra = 640           ' to be set if the subform has the new record row
        maxHeightSubform = 6000     ' maximum height of the subform
        minHeightSubform = 2200     ' minimum height of the subform window
    

    poi devi verificare il calcolo delle righe presenti nella SubForm nella parte di codice : (sostituire MySubForm con il nome della tua subform)

    ' Retrieve subform valus
        With Me.MySubForm.Form
            ' Retrieve recordcount
            .Recordset.MoveLast
            .Recordset.MoveFirst
            nRows = .Recordset.RecordCount

    .
    Adesso metti tutto insieme e richiami la routine per esempio nell'evento 

    Private Sub Form_Current()
       Call MyResizeSubForm
    End Sub

    Oppure in qualsiasi altro evento (per esempio su Form Load) che viene richiamato a fronte dell'aggiornamento delle righe nella subform.
    Questo lo devi determinare tu, dove e quando....

    ' RESIZE SUB FORM
    Private Sub MyResizeSubForm()
        On Error Resume Next
        Dim nRows As Long
        Dim heightRow As Long
        Dim heightExtra As Long
        Dim maxHeightSubform As Long
        Dim minHeightSubform As Long
        Dim heightHeader As Long
        Dim heightFooter As Long
        Dim newHeightSubForm As Long
    
        ' Set Values in twip -> 1 cm = approximately 567 twip
        heightRow = 310             ' row height
        heightExtra = 640           ' to be set if the subform has the new record row
        maxHeightSubform = 6000     ' maximum height of the subform
        minHeightSubform = 2200     ' minimum height of the subform window
    
        ' Retrieve subform valus
        With Me.MySubForm.Form
            ' Retrieve recordcount
            .Recordset.MoveLast
            .Recordset.MoveFirst
            nRows = .Recordset.RecordCount
            
            ' Retrive header and footer height
            If .Section(acHeader).Visible Then heightHeader = .Section(acHeader).Height
            If .Section(acFooter).Visible Then heightFooter = .Section(acFooter).Height
        End With
    
        ' Check if rows exists
        If nRows > 0 Then
            ' Calculate new height size subform
            newHeightSubForm = (nRows * heightRow) + heightExtra + heightHeader + heightFooter
            ' Check min and max height subform
            If newHeightSubForm > maxHeightSubform Then newHeightSubForm = maxHeightSubform
            If newHeightSubForm < minHeightSubform Then newHeightSubForm = minHeightSubform
            ' Set new height size subform
            Me.MySubForm.Height = newHeightSubForm
        Else
            ' Set minimun height subform if no rows exist
            Me.MySubForm.Height = minHeightSubform
        End If
    End Sub

    .
    FATTO !!!
    Impostati i valori, calcolandoli come ti ho spiegato sopra, poi li aggiusti al millimetro eseguendo la form con la sua subform...  
    Prova a provare ...   sono solo calcoli, non fanno male !  ;-)

  • Re: Machera continua con numero righe variabili

    Appena mi posso rimettere al Pc provo e ti faccio saper

    Grazie comunque

  • Re: Machera continua con numero righe variabili

    05/05/2025 - Scolaretto ha scritto:

    Appena mi posso rimettere al Pc provo e ti faccio saper

    Ma come ?????   pensavo tu avessi già fatto...   ;-)     (scherzo)   

    Ascolta una cosa... se non vuoi stare lì a calcolare manualmente le varie ALTEZZE, allora puoi usare questa versione della routine che imposta tutto in automatico.

    L'unica cosa esterna alla routine è la dichiarazione ad inizio del modulo (a livello di modulo), della variabile per salvare, solo una volta, il valore iniziale dell'altezza della subform che hai già stabilito in fase di progettazione (di disegno) della form e subform.

    Quindi si avrà una cosa di questo tipo .... esempio completo che richiama il resize della subform su evento Current Form:

    Option Compare Database
    Option Explicit
    
    Private maxHeightSubform As Long    ' Maximun heigth of the subform windows
    
    
    ' CURRENT FORM EVENT
    Private Sub Form_Current()
        Call MyResizeSubForm
    End Sub
    
    
    ' RESIZE SUBFORM
    Private Sub MyResizeSubForm()
        On Error Resume Next
        Dim nRows As Long
        Dim heightRow As Long
        Dim heightExtra As Long
        Dim minHeightSubform As Long
        Dim heightHeader As Long
        Dim heightFooter As Long
        Dim newHeightSubForm As Long
    
        ' Retrieve subform valus
        With Me.MySubForm.Form
            ' Retrieve recordcount
            .Recordset.MoveLast
            .Recordset.MoveFirst
            nRows = .Recordset.RecordCount
            ' Retrieve row height
            heightRow = .Section(acDetail).Height
            ' Retrive header and footer height
            If .Section(acHeader).Visible Then heightHeader = .Section(acHeader).Height
            If .Section(acFooter).Visible Then heightFooter = .Section(acFooter).Height
        End With
    
        ' To be set if the subform has the new record row
        heightExtra = heightRow * 2
        ' Minimum height of the subform window
        minHeightSubform = heightHeader + heightFooter + heightRow + heightExtra
        ' Maximun heigth of the subform windows
        If maxHeightSubform = 0 Then maxHeightSubform = Me.MySubForm.Height
    
        ' Check if rows exists
        If nRows > 0 Then
            ' Calculate new height size subform
            newHeightSubForm = (nRows * heightRow) + heightExtra + heightHeader + heightFooter
            ' Check min and max height subform
            If newHeightSubForm > maxHeightSubform Then newHeightSubForm = maxHeightSubform
            If newHeightSubForm < minHeightSubform Then newHeightSubForm = minHeightSubform
            ' Set new height size subform
            Me.MySubForm.Height = newHeightSubForm
        Else
            ' Set minimun height subform if no rows exist
            Me.MySubForm.Height = minHeightSubform
        End If
    End Sub

    Come detto in precedenza, personalizzare alcune cose per adattare la routine al proprio progetto:

    • MySubForm - sostituire il nome della subform
    • nRows  - verificare e/o modificare il reperimento del numero di righe caricate nella subform
    • heightExtra - verificare e/o modificare lo spazio extra da lasciare se presente o meno la riga di inserimento new record
    • Call MyResizeSubForm - individuare in quale evento/momento invocare la routine di resize subform

    .
    Basta così !!!  Prova a provare   ;-)

  • Re: Machera continua con numero righe variabili

    05/05/2025 - Scolaretto ha scritto:

    Primo caso . 

    Comunque io avrei scelto il secondo caso

    e in quel caso tu non dovevi fare e/o modificare proprio nulla nel codice ... ci pensava in automatico la signorina a fare tutto il lavoro al posto tuo   ;-)

    Però vabbè, ... siamo in democrazia e ognuno giustamente e nei limiti, fa quel che vuole.

    :-)

  • Re: Machera continua con numero righe variabili

    Funziona alla grande , ho provata anche a ridimensionare una form che apro mediante un pulsante da altra form, non ci sono riuscito, se mi dai una mano anche per questo caso ti ringrazio, e poi son curioso di vedere la seconda opzione

    grazie di tuttto.

Devi accedere o registrarti per scrivere nel forum
39 risposte