Problema in Close di una maschera.

di il
26 risposte

Problema in Close di una maschera.

Buongiorno a tutti.
Oggi ho un altro problemino, un pò complesso e dal quale è vero che ne sono uscito, ma in un modo non del tutto "pulito".
Mi spiego meglio.

Ho una maschera, basata su una tabella, sulla quale, nell'evento "Dopo aggiornamento" (o AfterUpdate), faccio eseguire delle istruzioni e, se trova il comando
DoCmd.Close
, lui chiude tranquillamente; se, invece, arriva a "End Sub" (quindi la compie tutta senza interruzioni), e passa quindi al contenuto dell'evento "In Uscita" (exit), trovando lo stesso comando, non esce dalla maschera, dandomi l'errore RunTime 2585 e dicendo che non può eseguire un comando di uscita da una sub relativa ad una query o una maschera.

Diciamo che, per far lavorare il cliente in attesa di una correzione, ho inserito un pulsante con il quale chiudo la maschera, e fin lì Amen, tutto va bene; però preferirei non usare il pulsante e far chiudere la maschera in automatico alla fine della subroutine.

Ammetto di aver capito che l'evento "in uscita" va gestito in modo differente al "dopo aggiornamento" (lo stesso che vale, per esempio, con "in apertura" e "in caricamento"), ma non capisco dove sbaglio.

Ho letto un po' di post in giro, ma non sono riuscito comunque a trovare una soluzione che mi "desse soddisfazione".
C'è qualcuno che può darmi un qualche suggerimento?

26 Risposte

  • Re: Problema in Close di una maschera.

    Dovresti postare l'intero codice per venire a capo del tuo problema.
  • Re: Problema in Close di una maschera.

    OsvaldoLaviosa ha scritto:


    Dovresti postare l'intero codice per venire a capo del tuo problema.
    Ok
    
    Private sub PERCCLASSE_Exit(Cancel As Integer)
    
    ... cut ...
    
    title = MsgBox(testomessaggio, vbYesNo, "Completamento Classifica")
                If title = 6 Then
                    [Forms]![TTBOLPEU]![PREZ_TOTALE] = Me.txtPrPartita
                    [Forms]![TTBOLPEU]![PREZ_MEDIO] = Me.txtPrPartita / Me.nmKgPeriziati
        
                    '-------- Accoda Classifica
                    'stDocName = "QACCBOLP"
                    DoCmd.OpenQuery stDocName, acNormal, acEdit
                    '-------- Fine Accodamento Classifica
        
                    CurrentDb.Execute "DELETE * FROM [BOLPERTEMP]"   '-----> Cancella una tabella temporanea di appoggio
                    [Forms]![TTBOLPEU]![Classifica].Requery                  ' -----> Mi fa il requery di una submask in un'altra maschera
                    
                    DoCmd.Close   '----------------------->>> La posizione della Close che mi dà errore 2585
                    Else
                    
                If title = 7 Then
                        stDocName = "Q_ReCLASS_RIT"
                        DoCmd.OpenQuery stDocName, acNormal, acEdit
                        Me.Requery
                        Me.PERCCLASSE.Enabled = True
                        Me.txtPrMed = 0
                        Me.txtPrPartita = 0
                        Me.PERCCLASSE.SetFocus
                        Me.A = DCount("[IDCLASSIFICA]", "BOLPERTEMP", "[PERCCLASSE]=0")
                        
                        End If
                    End If
    
    end sub
    
    Se hai bisogno di altre notizie, chiedi pure
  • Re: Problema in Close di una maschera.

    DoCmd.Close
    Ma tu quale maschera vuoi chiudere? Prova a dichiarare esplicitamente il NomeMaschera corrispondente.
  • Re: Problema in Close di una maschera.

    OsvaldoLaviosa ha scritto:


    DoCmd.Close
    Ma tu quale maschera vuoi chiudere? Prova a dichiarare esplicitamente il NomeMaschera corrispondente.
    Leggendo le varie pubblicazioni, ho provato anche a sostituire quel semplice "docmd.Close" con un più adatto

    DoCmd.Close , "TTBOLP_CL", acSaveYes

    dove "TTBOLP_CL" è il nome della maschera

    Ma niente.
  • Re: Problema in Close di una maschera.

    Else
                If title = 7 Then
    Una If contiene solo 2 ipotesi. La If title = 6 l'avevi già analizzata prima. Se vuoi analizzare il caso Else, non devi dichiarare If title = 7 perché significa che vuoi aprire una nuova If nidificata. Questo è un errore certo.

    Penso che il DoCmd.Close andrebbe messo alla fine di tutto il malloppo If...ma non sono sicuro.

    carlo pots ha scritto:


    dandomi l'errore RunTime 2585 e dicendo che non può eseguire un comando di uscita da una sub relativa ad una query o una maschera.
    Rileggendo...direi che il messaggio parla chiaro. Tu stai ancora elaborando qualcosa su degli oggetti "pendenti" e (come dire) non puoi permetterti di "abbandonarli così" di punto in bianco.
    Non vorrei che anche la scelta dell'evento Exit sia infelice.
  • Re: Problema in Close di una maschera.

    Questo l'avevo inteso anche io.
    In tutti i modi, non ricordo esattamente se ho provato (senza successo) a utilizzare l'Else; nel dubbio ci provo un attimo e ti faccio sapere.
    Dammi pochi minuti e ti saprò dire.
  • Re: Problema in Close di una maschera.

    Niente da fare: ho corretto l'errore certo che dicevi (e su cui ero già d'accordo in linea di principio) con l'Else al posto di una nuova If, ho messo un GoTo Chiudi prima dell'Else e, dopo l'Endif, ho inserito un Exit Sub per evitare di finire sulle righe successive all'etichetta "Chiudi:" e quindi l'istruzione di chiusura, ma niente: è proprio l'istruzione DoCmd.Close che non viene accettata nella Sub Exit.

    Effettivamente è come se avessi ancora una pendenza dopo l'esecuzione di quella query (che è di "accodamento") e la cancellazione della tabella temporanea .
  • Re: Problema in Close di una maschera.

    carlo pots ha scritto:


    Niente da fare: è proprio l'istruzione DoCmd.Close che non viene accettata nella Sub Exit.

    Effettivamente è come se avessi ancora una pendenza dopo l'esecuzione di quella query (che è di "accodamento") e la cancellazione della tabella temporanea .
    A me pare chiaro
    hai provato quanto suggerito da osvaldo:
    dopo end if:
     DoCmd.Close acForm, "TuaMaschera"
  • Re: Problema in Close di una maschera.

    Ho provato anche quello; niente da fare.
    Nel dubbio, però, ci riprovo.
  • Re: Problema in Close di una maschera.

    Niente da fare:
    "Errore di run-time '2585':
    Impossibile eseguire questa azione durante l'elaborazione di un evento di maschera o di report"

    Stiamo sempre lì
  • Re: Problema in Close di una maschera.

    OsvaldoLaviosa ha scritto:


    Else
                If title = 7 Then
    Una If contiene solo 2 ipotesi. La If title = 6 l'avevi già analizzata prima. Se vuoi analizzare il caso Else, non devi dichiarare If title = 7 perché significa che vuoi aprire una nuova If nidificata. Questo è un errore certo.
    Osvaldo... una if non contiene solo 2 ipotesi ed else non è la 2 ipotesi ma analizza TUTTI gli altri casi: in questo caso else analizzerebbe tutti gli altri casi,diversi da 6.
    Qui pare si vogliano analizzare solo i casi 6 e 7.
  • Re: Problema in Close di una maschera.

    Gianni55 ha scritto:


    Osvaldo... una if non contiene solo 2 ipotesi ed else non è la 2 ipotesi ma analizza TUTTI gli altri casi: in questo caso else analizzerebbe tutti gli altri casi,diversi da 6.
    Qui pare si vogliano analizzare solo i casi 6 e 7.
    Esattamente
  • Re: Problema in Close di una maschera.

    DoCmd.Close   '----------------------->>> La posizione della Close che mi dà errore 2585
                    Else
                    
                If title = 7 Then
    Scusa a cosa fa riferimento quell'else, ci dici cosa volevi scrivere?
  • Re: Problema in Close di una maschera.

    MsgBox contiene un vbYesNo. Se non si tratta di 6=vbYes, penso che Else significa (automaticamente--->solo) vbNo=7.
    Mi si corregga se sbaglio.
Devi accedere o registrarti per scrivere nel forum
26 risposte