Sottomaschera con codice che va in errore

di fcaliandro il
5 risposte

Ho un problema sul codice seguente. 

Il codice è stato generato per la maschera A e fintanto che lavoro sulla maschera A funziona tutto alla perfezione.

Ho creato una maschera B che contiene la maschera A come sottomaschera: in questo caso il codice non funziona.

Spiego meglio di seguito nel dettaglio:

SITUAZIONE 1: Operare direttamente sulla maschera A

 Lo scopo del codice è quello di agevolare l'inserimento dati in una cella di testo lungo aprendo una maschera di appoggio frmZoom. 

Sequenza operativa:

1) tramite doppio click sulla cella di testo in questione si apre la maschera frmZoom

Private Sub EMAIL_SUBJECT2_DblClick(Cancel As Integer)
StrZoomText = Me.ActiveControl
StrZoomControl = Me.ActiveControl.Name
StrOpenForm = Me.Name
DoCmd.OpenForm "frmZoom"
End Sub

All'interno della frmZoom ho inserito un pulsante di salvataggio "Chiudi"

2) cliccando sul pulsante "Chiudi": si chiude la frmZoom dopo aver salvato il contenuto

Private Sub Command2_Click()
Forms(StrOpenForm)(StrZoomControl) = Me.txtTextField
DoCmd.Close
End Sub

Funziona tutto perfettamante finchè opero sulla maschera

SITUAZIONE 2: Operare sulla maschera A inserita come sottomaschera della maschera B:

Il punto 1) funziona correttamente

il punto 2) va in errore. Immagino che il problema sia legato all'utilizzo del "Me."

C'è un modo elegante per mettere a posto il codice in modo che funzioni in entrambe le situazioni?

Grazie 

Francesco

5 Risposte

  • 23/09/2026 - fcaliandro ha scritto:

    Forms(StrOpenForm)(StrZoomControl) = Me.txtTextField

    Come maschera stai dicendo:

    MascheraA>>controllo=valore.

    Ma quando la usi come sotto maschera

    MascheraB>>mascheraA>>controllo=valore.

    Quindi nel form.zoom devi settare una variabile che stabilisce se fa riferimento ad una maschera o una sotto maschera.

    Tipo:

    Se variabilestato=Maschera >>> va bene com'è attualmente

    Se variabilestato=Sottomaschera >>>aggiungi la maschera principale.

    Consiglio: Se la variabile la setti come.'nulla'  allora usi il codice per com'è 

    Se usi questo form anche su altre maschere e Sottomaschera allora la variabile potrebbe riportare il nome della maschera principale.

    StrOpenForm = Me.Name 

    mi era sfuggito.. qui metti maschera e sottomaschera.

  • Ciao Andrea grazie x l'aiuto

    Di sicuro la maschera di zoom la uso un svariati punti. Spesso in maschere basate su una query di riepilogo (semplicemente per leggere meglio cio che in uno spazio limitato non è possibile). In quest'ultimo caso il pulsante chiudi (e salva) non ha senso dato che non posso modificare il contenuto della text box.

    Quindi posso inserire una condizione IF e lavorarci su.

    Immagino che la variabile di stato che mi suggerisci dovrebbe prendere il valore della proprietà della active form...

    Grazie, ci provo

    francesco 

  • 24/09/2026 - fcaliandro ha scritto:

    In quest'ultimo caso il pulsante chiudi (e salva) non ha senso dato che non posso modificare il contenuto della text box.

    Ma io non ho scritto questo...

    Comunque, in informatica, tutte le strade portano a Roma...

    Metti una variabile pubblica, che so' varzoom, di tipo testo. Quando avvii il form zoom la inizializzi a "" quando fai chiudi dici che la variabile contiene il testo che ti serve, poi  al ritorno del form principale controlli se piena (potresti aver fatto 'annulla') e riversi il contenuto della variabile.

    C'è solo un limite alle possibili soluzioni: la fantasia!

  • Grazie Andrea

    proverò a sollecitarla.. 

    ciao

  • MsAccess mette a disposizione una ZoomBox nativa che pochi usano e conoscono...!!!

    Private Sub NomeTextBox_DoubleClick()
        DoCmd.RunCommand acCmdZoomBox
    End If

    Funziona bene senza altro codice, se metti un pulsante per aprirla serve prima spostare il focus sulla textbox

    Private Sub cmdButton_Click()
    	Me!NomeTextBox.SetFocus
        DoCmd.RunCommand acCmdZoomBox
    End If
Devi accedere o registrarti per scrivere nel forum
5 risposte