Interrompere MsgBOx



  • Interrompere MsgBOx
    di Pietro (utente non iscritto) data: 14/08/2013 18:38:16

    Ciao Ragazzi,
    ho creare un pulsante che mi fa comparire delle msgbox che ho creato.
    Vorrei che quando compare una msgbox, se clicco su ok mi fa andare avanti mostrandomi le altre msgbox, ma se clicco sulla X rossa in alto a destra me la deve chiudere e non mi deve mostrare più nulla.

    Grazie mille,
    buon ferragosto.



  • di Grograman data: 15/08/2013 20:52:18

    Direi scarsina come spiegazione.
    Hai una msbox, dove è?

    Dipende da CHE msbox usi.

    A seconda del tipo utilizzato il valore assunto dalla stessa quando premi il pulsante X cambia, quindi prima decidi quale usi, prova questo codice, e poi dopo la msgbox dirai "if varX = 1 then exit sub"
     
    Option Explicit
    
    Sub closemsgbox()
    Dim dblX As Double
    
    varX = MsgBox("Che devo fare?", vbOKCancel, "Titolo")
    Debug.Print varX
    
    End Sub
    
    



  • di Grograman data: 15/08/2013 20:52:55

    dblX va sostituita a varX nel codice ;)



  • di Antonio (utente non iscritto) data: 17/08/2013 23:38:18

    Buonasera. Pure io ho lo stesso problema. Ho una macro precisamente Sub Verifica poi le Dim e infine il "classico" msgbox che mi trova dei valori. Vorrei anche io chiudere il msgbox con la x perché cliccando ok mi fa andare avanti. Ho provato con il codice scritto da Grograman ma non mi funziona, sicuramente sto sbagliando io a fare qualcosa. Gentilmente mi dite precisamente cosa devo fare nel senso dove devo inserire il codice scritto? if varX = 1 then exit sub dove lo devo inserire? Grazie in anticipo



  • di HarryBosch data: 18/08/2013 11:25:54

    All'esempio di Grograman, ve ne aggiungo un altro
     
    Sub catena_msgbox()
    
      Select Case MsgBox("Vuoi andare avanti", vbOKCancel Or vbQuestion Or vbDefaultButton1, "PRIMO")
      Case vbOK
        'istruzioni varie se premo OK
      Case vbCancel
        Exit Sub
      End Select
    
      Select Case MsgBox("Vuoi andare avanti la seconda volta?", vbOKCancel Or vbQuestion Or vbDefaultButton1, "SECONDO")
      Case vbOK
        'istruzioni varie se premo OK
      Case vbCancel
        Exit Sub
      End Select
    
      Select Case MsgBox("Vuoi proseguire o annullare?", vbOKCancel Or vbQuestion Or vbDefaultButton1, "TERZO")
      Case vbOK
        'istruzioni varie se premo OK
      Case vbCancel
        Exit Sub
      End Select
    
      MsgBox "Terminato"
    
    End Sub


  • Interrompere MsgBOx
    di Pietro (utente non iscritto) data: 19/08/2013 07:24:15

    Grazie mille, proprio quello di cui avevo bisogno.



  • di Antonio (utente non iscritto) data: 21/08/2013 19:37:21

    Ciao. Scusate se riapro la discussione ma siccome sono un pò ignorante in materia non sono riuscito a risolvere il mio problemuccio. A me serve interrompere il msgbox con la x rossa. Ho una macro con una Sub che si chiama verifica che ho descritto nel mio precedente messaggio. Per "abilitare" la x rossa a interrompere il msgbox concretamente cosa devo fare? Devo aggiungere alla mia Sub una Dim per la x e una riga di codice che una volta che clicco la x mi fa uscire dalla Sub? Qualcuno sa dirmi questo codice? Help me



  • di HarryBosch data: 21/08/2013 20:04:51

    Piccolo consiglio: quando non sapete che valore assume una variabile, o volete controllarne l'andamento, potete anche utilizzare la finestra delle variabili locali.
    Eseguite il codice con F8, oppure impostate una interruzione dove vi interessa, e andate a verificare i valori assunti dalle variabili in questa finestra.

    Altro esempio, sullo spunto di Grograman. La pressione del tasto Annulla, o della X in alto, fermerà la routine.
     
    Sub prova()
      Dim varX As Byte
    
      varX = MsgBox("Vuoi proseguire?", vbOKCancel, "Titolo")
    
      If varX = 2 Then Exit Sub
    
      MsgBox "sei andato avanti"
      
    End Sub



  • di Grograman data: 21/08/2013 20:42:16

    Sottolineo quanto detto da Harry e aggiungerei che il mio primo codice è errato, come scritto da lui una variabile Byte è più che sufficiente in quanto la msgbox non potrà che restituire questi valori:


    Constant Value Description
    vbOK 1 OK
    vbCancel 2 Cancel
    vbAbort 3 Abort
    vbRetry 4 Retry
    vbIgnore 5 Ignore
    vbYes 6 Yes
    vbNo 7 No




  • di Antonio (utente non iscritto) data: 23/08/2013 20:36:35

    Ciao. Ho provato il codice ma credo che non sia quello che fa al caso mio. Inserisco la mia Sub così per voi è più semplice capire come fare per interrompere il msgbox con la x.
     
    Sub Verifica()
    
    Dim Indovinato, i, J, Riga, Colonna As Integer
    Dim Data As String
    Dim Am, Te, Qu, Ci As Integer
    Am = 0
    Te = 0
    Qu = 0
    Ci = 0
    
    For Riga = [T5] To Range([S5] & ":D65536").End(xlDown).Row
        Indovinato = 0
        For i = 11 To 15
            Numero = Cells(5, i + 1)
                For Colonna = 4 To 8
                    If Numero = Cells(Riga, Colonna) Then
                        Indovinato = Indovinato + 1
                    End If
                Next Colonna
            Next i
            Data = Cells(Riga, 3)
            Select Case Indovinato
            Case Is = 2
            MsgBox "Estrazione del " & Data & ":" & Chr(13) & Chr(13) & "1 AMBO"
            Am = Am + 1
            Case Is = 3
            MsgBox "Estrazione del " & Data & ":" & Chr(13) & Chr(13) & "1 TERNO"
            Te = Te + 1
            Case Is = 4
            MsgBox "Estrazione del " & Data & ":" & Chr(13) & Chr(13) & "1 QUATERNA"
            Qu = Qu + 1
            Case Is = 5
            MsgBox "Estrazione del " & Data & ":" & Chr(13) & Chr(13) & "1 CINQUINA"
            Ci = Ci + 1
            End Select
    Next Riga
    MsgBox "In totale ci sono:" & Chr(13) & Chr(13) & Ci & " CINQUINE/A" & Chr(13) & Qu & " QUATERNE/A" & Chr(13) & Te & " TERNI/O" & Chr(13) & Am & " AMBI/O"
    End Sub



  • di Grograman data: 23/08/2013 20:42:09

    Senza entrare nel merito del codice, manca la dichiarazione delle variabili e non ha senso istanziare a 0 una variabile in quanto nasce già con quel valore

    Oltre a questo, spiega cosa vuoi fare più chiaramente possibile, oltre al fatto che il codice postato non ha alcun senso!
    Forse sul tuo file può girare, anche se non vedo come
     
     Indovinato = 0
    Am = 0
    Te = 0
    Qu = 0
    Ci = 0
    
    Nonsense:
    For Riga = [T5].Value To Range([S5] & ":D65536").End(xlDown).Row
    



  • di Antonio (utente non iscritto) data: 23/08/2013 20:58:13

    Quel codice non l'ho scritto io, me lo hanno scritto in quanto per me il vba è tipo il giapponese Nel mio file excel funziona bene solo che manca il codice per interrompere il msgbox con la x.



  • di Antonio (utente non iscritto) data: 23/08/2013 22:25:22

    Aggiungo ci tramite msgbox mi fa vedere per esempio quanti ambi ci sono nell'intervallo di celle, quindi mi trova il primo io faccio ok e mi trova il secondo faccio ok mi trova il terzo ecc però se io voglio interrompere il msgbox non posso e devo arrivare fino all'ultimo. Spero che così è più chiaro.



  • di HarryBosch data: 24/08/2013 01:50:23

    L'esempio andava bene, bastava soltanto modificare nello stesso modo le tue msgbox...
    Assegnavi una variabile alla msgbox e controllavi alla fine del select case che questa non fosse =2, ovvero che non si fosse premuto il tasto X come, assieme a Grograman, abbiamo già sufficientemente descritto.

    Nemmeno io entro nel merito del codice in quanto, oltre alla inefficiente dichiarazione delle variabili (dove per il vba è da specificare il tipo per ciascuna, diversamente dal vb), credo che sia possibile una ottimizzazione generale.


     
    Sub Verifica()
    
      Dim Indovinato, i, J, Riga, Colonna As Integer
      Dim Data As String
      Dim Am, Te, Qu, Ci As Integer
      Dim varX As Byte
    
      For Riga = [T5] To Range([S5] & ":D65536").End(xlDown).Row
        Indovinato = 0
        For i = 11 To 15
          Numero = Cells(5, i + 1)
          For Colonna = 4 To 8
            If Numero = Cells(Riga, Colonna) Then
              Indovinato = Indovinato + 1
            End If
          Next Colonna
        Next i
        Data = Cells(Riga, 3)
        Select Case Indovinato
        Case Is = 2
          varX = MsgBox("Estrazione del " & Data & ":" & Chr(13) & Chr(13) & "1 AMBO", vbOKCancel, "AMBO")
          Am = Am + 1
        Case Is = 3
          varX = MsgBox("Estrazione del " & Data & ":" & Chr(13) & Chr(13) & "1 TERNO", vbOKCancel, "TERNO")
          Te = Te + 1
        Case Is = 4
          varX = MsgBox("Estrazione del " & Data & ":" & Chr(13) & Chr(13) & "1 QUATERNA", vbOKCancel, "QUATERNA")
          Qu = Qu + 1
        Case Is = 5
          varX = MsgBox("Estrazione del " & Data & ":" & Chr(13) & Chr(13) & "1 CINQUINA", vbOKCancel, "CINQUINA")
          Ci = Ci + 1
        End Select
    
        If varX = 2 Then Exit Sub
    
      Next Riga
    
      MsgBox "In totale ci sono:" & Chr(13) & Chr(13) & Ci & " CINQUINE/A" & Chr(13) & Qu & " QUATERNE/A" & Chr(13) & Te & " TERNI/O" & Chr(13) & Am & " AMBI/O"
    End Sub



  • di HarryBosch data: 24/08/2013 01:55:34

    Giusto per pignoleria:
    in questo caso le Msgbox ti chiederanno se proseguire o annullare l'operazione, con un doppio tasto:
    OK - ANNULLA
    premere Annulla o la X in alto è la stessa cosa

    Puoi eventualmente, nel caso volessi mostrare solo il tasto OK, sostituire all'interno di tutte le Msgbox l'argomento
    vbOKCancel con vbOKOnly
    e in questo caso, il valore di uscita deve essere =1, ovvero:
    If varX = 1 Then Exit Sub



  • di Antonio (utente non iscritto) data: 24/08/2013 19:37:48

    Ciao HarryBosch, il tuo codice con vbOKCancel va benissimo e quindi ti ringrazio mentre con vbOKOnly e l'uscita con il numero 1 fa solo vedere il primo msgbox e poi si chiude automaticamente sia con la x che premendo ok.



  • di HarryBosch data: 26/08/2013 08:37:02

    Hai ragione, per "pignoleria" ho puntualizzato una "cavolata" ^_^
    Nell'utilizzo del vbOkOnly la pressione del tasto OK e della X di chiusura portano sempre allo stesso valore =1



  • di Antonio (utente non iscritto) data: 26/08/2013 12:40:36

    Ok, quindi devo utilizzare per forza il vbOKCancel?



  • di HarryBosch data: 26/08/2013 13:32:46

    Utilizza quello, che ha anche più senso visto che devi optare per una doppia scelta, ovvero proseguire con i successivi messaggi o annullare l'operazione.



  • di Antonio (utente non iscritto) data: 26/08/2013 14:05:15

    Ok, grazie.