gestione chiusura form



  • gestione chiusura form
    di lormac (utente non iscritto) data: 07/11/2016 04:46:48

    Buongiorno,
    non riesco ad interrompere un'istruzione.
    La situazione è questa.
    ho due form:
    frm1 con tre option button e un command button vai, un command button chiudi e una listbox.
    frm2 con due option button e un command button chiudi

    Se viene selezionato opt1, il command vai mi apre la frm2 in cui effettuo delle scelte e conseguentemente mi seleziona il foglio 8 continuando l'istruzione del cmd vai della frm1.
    Fin qui tutto bene (al di là del codice più o meno appropriato)
    Se però volessi chiudere la frm2 per tornare alla frm1 e variare le scelte, comunque prosegue l'istruzione precedente del cmd vai selezionando il foglio 8 ecc. ecc.

    In pratica vorrei che il command chiudi della frm2 mi chiuda la frm2 e mi ritorni alla frm1 e qualora io decida di chiudere la frm1 mi chiuda anche la frm1.

    Grazie per chi volesse darmi una mano


     
    Private Sub cmdVai_Click()
    If (opt1.Value = True) Then
        Unload Me
        frm2.Show
        Foglio8.Select 'selezioni Foglio8
        Foglio8.Range("E8") = ListBox1.Column(0) 'ASSEGNA IL VALORE SELEZIONATO DELLA LISTBOX1 ALLA CELLA E8
    ElseIf (opt2.Value = True) Then
        Foglio9.Select 'Altrimenti selezioni Foglio9
        Foglio9.Range("E8") = ListBox1.Column(0) 'ASSEGNA IL VALORE SELEZIONATO DELLA LISTBOX1 ALLA CELLA E8
    ElseIf (opt6.Value = True) Then
        Foglio10.Select 'Altrimenti selezioni Foglio10
        Foglio10.Range("E8") = ListBox1.Column(0) 'ASSEGNA IL VALORE SELEZIONATO DELLA LISTBOX1 ALLA CELLA E8
    Exit Sub
    End If
    
    



  • di Marius44 data: 07/11/2016 07:45:56

    Ciao
    ma hai deciso tu le istruzioni. Excel le esegue solamente!
    Guardando il tuo codice vedo che, cliccando il pulsante Cmd1, stai dicendo ad Excel:
    se una delle Opt è valorizzata vai a tale Foglio e scrivi il dato selezionato nella List (addirittura se è valorizzata Opt1 "scarica" la Form).
    Non puoi "tornare" a Form1 perchè al momento non c'è; devi richiamarla. Se chiudi la Form2 con un pulsante a questo pulsante associa Form1.Show e, quindi, Unload Form2. Da questo pulsante, però, non puoi chiudere anche Form1 perchè Excel non può sapere "qualora io decida di chiudere la frm1 ".

    Fai una prova:
    clicca cmd1 con opt1 selezionato e chiudi Form2 dalla X in alto. Vedrai che "sotto" c'è il Foglio.
    clicca cmd1 con opt2 selezionato e chiudi Form2 dalla X in alto. Vedrai che "sotto" c'è Form1.

    Ciao,
    Mario



  • di lormac (utente non iscritto) data: 07/11/2016 12:15:14

    Ciao Mario,
    grazie per la risposta.
    E aggiungo: meno male che Excel esegue le istruzioni.
    Cerco di spiegare la sequenza:
    Apro la frm1. Seleziono opt1 e clicco cmdVai. Si apre la frm2. E fin qui tutto fila. Excel attende le scelte di frm2 e poi conclude le istruzioni del cmdVai (in questo caso foglio8.select, ecc.).
    Se però nella frm2 clicco cmdChiudi, allora scarico la frm2 e ricarico la frm1. Ma l'istruzione del cmdVai resta in piedi e quindi se nella frm1 clicco cmd.Chiudi vorrei scaricare la frm1 e invece prosegue l'istruzione foglio8.select e assegna alla cella E8 il valore della listbox.



  • di Marius44 data: 07/11/2016 14:43:09

    Ciao
    Forse, senza dati sensibili, è meglio se alleghi il file.

    Nel caso non fosse possibile allora inserisci tutto il codice, dei vari pulsanti di frm1 e frm2. Cercherò di "capire" se c'è qualcosa che non va.

    Ciao,
    Mario



  • di lormac (utente non iscritto) data: 07/11/2016 17:04:27

    Buonasera Mario,
    Ripeto la sequenza:
    sono in frm1.
    se clicco su cmdChiudi, tutto ok. Mi chiude la frm1.
    se invece seleziono opt1, opt2, opt3, il cmdVai mi esegue l'azione necessaria.
    Nel caso di opt1, mi apre una seconda form, la frm2. Se in frm2 seleziono opt1 o opt2, tutto ok. Se invece seleziono cmdChiudi, mi riapre la frm1. Qui però se decido di utilizzare il cmdChiudi (quello della frm1), mi prosegue l'istruzione del cmdVai dato in precedenza. Mentre se seleziono uno gli opt andrebbe bene.
    In buona sostanza, io vorrei che una volta cliccato cmdChiudi in frm2 possa cliccare su cmdChiudi frm1 interrompendo la sequenza che si era generata con opt1.
    Non so ho spiegato bene.
    sotto il codice delle due frm
     
    'FORM1
    '--------------------------------------------------------
    Private Sub cmdVai_Click()
    If (opt1.Value = True) Then
        Unload Me
        frm2.Show
        Foglio8.Select 'selezioni Foglio8
        Foglio8.Range("E8") = ListBox1.Column(0) 'ASSEGNA IL VALORE SELEZIONATO DELLA LISTBOX1 ALLA CELLA E8
    ElseIf (opt2.Value = True) Then
        Foglio9.Select 'Altrimenti selezioni Foglio9
        Foglio9.Range("E8") = ListBox1.Column(0) 'ASSEGNA IL VALORE SELEZIONATO DELLA LISTBOX1 ALLA CELLA E8
    ElseIf (opt6.Value = True) Then
        Foglio10.Select 'Altrimenti selezioni Foglio10
        Foglio10.Range("E8") = ListBox1.Column(0) 'ASSEGNA IL VALORE SELEZIONATO DELLA LISTBOX1 ALLA CELLA E8
    Exit Sub
    End If
    Unload Me
    frmStampanti.Show vbModeless
    End Sub
    '-------------------------------------
    Private Sub UserForm_QueryClose(cancel As Integer, CloseMode As Integer)
    If CloseMode = vbFormControlMenu Then
    cancel = True
    End If
    End Sub
    '----------------------------
    Private Sub cmdChiudi_Click()
    Unload Me
    Worksheets("GENERALE").Select
    End Sub
    '==========================================
    'FORM2
    '------------------------------------------------------
    Private Sub cmdChiudi_Click()
    Unload Me
    frm1.Show
    'Worksheets("GENERALE").Select
    End Sub
    '----------------------------------------------------
    Private Sub opt1_Click()
    Foglio8.Range("E131") = Foglio2.Range("Q2")
    frm2.Hide
    End Sub
    '----------------------------------------------------
    Private Sub opt2_Click()
    Foglio8.Range("E131") = Foglio2.Range("Q3")
    frm2.Hide
    End Sub
    '---------------------------------------------------
    Private Sub UserForm_Activate()
    Call ClearOptionButton
    End Sub
    
    Private Sub UserForm_QueryClose(cancel As Integer, CloseMode As Integer)
    If CloseMode = vbFormControlMenu Then
    cancel = True
    End If
    End Sub
    Sub ClearOptionButton()
    opt1.Value = False
    opt2.Value = False
    End Sub
    



  • di Marius44 data: 07/11/2016 19:38:02

    Ciao
    Come puoi vedere dall'allegato non era affatto difficile "ricostruire" il tuo lavoro senza dati sensibili.

    A mio parere il codice funziona, a parte alcune cose che ho "aggiustato" per poter fare le verifiche.
    Non capisco cosa vuoi che faccia.
    Ciao,
    Mario



  • di lormac (utente non iscritto) data: 07/11/2016 20:46:53

    Grazie Mario.
    Ho allegato il file eliminando il superfluo.
    Il problema si pone quando si seleziona l'opzione 4.
    Cliccando cmdVai, si apre la frmDelegato. Se si sceglie cmdChiudi, correttamente mi chiude la form e mi mostra nuovamente la frmSceltaModulo, ma a questo punto io dovrei fare in modo da resettare l'istruzione chiamante, poichè qualsiasi cosa scelga, comunque Excel continua ad eseguire la precedente chiamata.



  • di Marius44 data: 07/11/2016 23:22:37

    Ciao
    Il percorso che fai fare è un po' contorto (potresti evitare il cmdVai ed associare il codice ai vari opt, con controllo sulla selezione del nome della ListBox).
    Ho apportato alcune rettifiche aggiungendo qualche riga di codice.
    Vedi (io non so cosa vuoi fare e potrei aver sbagliato) se va bene così.
    Riallego il file - ProvaDue

    Ciao
    Mario



  • di lormac (utente non iscritto) data: 08/11/2016 12:34:21

    Ciao Mario,
    penso che di aver risolto il problema. qualora così non fosse, riaprirò la discussione.
    per adesso la spunto come risolta
    ho postato il file prova3.
    grazie mille