Sviluppare funzionalita su Microsoft Office con VBA chiudere maschera con tasto ESC

Login Registrati
Stai vedendo 25 articoli - dal 1 a 25 (di 39 totali)
  • Autore
    Articoli
  • #53077 Score: 0 | Risposta

    Frasubb
    Partecipante
      1 pt

      ciao a tutti,

      avrei l'esigenza di chiudere la userform pigiando il tasto ESC, invece che il bottone "chiudi" usando manualmente il mouse.

      Come faccio ?

      Grazie !!

      #53078 Score: 0 | Risposta

      Mirko
      Partecipante
        2 pts

        Inserisci un commanButton nel form

        Modifica la proprietà

        Cancel = True

        Aggiungi la routine:

        Private Sub CommandButton1_Click()
            Unload Me
        End Sub
        #53079 Score: 0 | Risposta

        alfrimpa
        Partecipante
          33 pts

          @mirko la richiesta era di chiudere una userform con il tasto Esc non con un commandbutton.

          Non so se sia possibile con il tasto ESC; si dovrebbe provare con Application.OnKey magari con un tasto diverso da ESC.

          #53080 Score: 0 | Risposta

          alexps81
          Moderatore
            58 pts

            Frasubb ha scritto:

            avrei l'esigenza di chiudere la userform pigiando il tasto ESC

            Mmmmm....forse è possibile ma dovresti lavorare sull'evento KeyDown di ogni controllo presente in UserForm (in ogni TextBox, ComboBox e ListBox).

            Qualcosa del genere:

            Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
                If KeyCode = vbKeyEscape Then
                    Unload Me
                End If
            End Sub

            da ripetere come dicevo in ogni controllo.

            Però lo vedo un lavoro inutile.

            Sono curioso di capire come mai non è possibile chiudere la UserForm utilizzando il click del mouse?!   

            #53081 Score: 0 | Risposta

            LucaSR
            Partecipante
              15 pts

              Ciao ricordo che in VB.NET impostando la proprietà "cancelButton" a True si otteneva quello che chiedi, però non so in VBA.

              Puoi provare e riferire. Purtroppo non ho il pc davanti per provare   

              #53083 Score: 0 | Risposta

              LukeReds
              Partecipante
                19 pts

                ciao

                doppio click sulla userform e aggiungi il codice

                 

                Private Sub UserForm_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
                If KeyCode = vbKeyEscape Then Unload Me
                End Sub
                #53084 Score: 0 | Risposta

                LucaSR
                Partecipante
                  15 pts

                  LukeReds ha scritto:

                  ciao

                  Potrebbe essere una soluzione, però se il focus è su un controllo qualsiasi, il tuo codice non funzionerà!

                  #53085 Score: 0 | Risposta

                  LukeReds
                  Partecipante
                    19 pts

                    allora penso vadano usate le API... ucas 

                    #53086 Score: 0 | Risposta

                    Oscar
                    Partecipante
                      45 pts

                      LukeReds ha scritto:

                      allora penso vadano usate le API... ucas 

                      Perchè le Api prova così la metti nell'userform

                      Private Sub UserForm_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
                          If KeyAscii = 27 Then Unload Me
                      End Sub
                      #53087 Score: 1 | Risposta

                      alexps81
                      Moderatore
                        58 pts

                        Oscar ha scritto:

                        prova così la metti nell'userform

                        Ciao Oscar, sei sicuro che funziona? Tu l'hai provato? Immagino che in una UserForm ci sia almeno una TextBox o ComboBox, altrimenti non vedo che senso abbia la sua esistenza. Prova il tuo codice con almeno uno di questi controlli.

                        #53088 Score: 0 | Risposta

                        Oscar
                        Partecipante
                          45 pts

                          alexps81 ha scritto:

                          Oscar ha scritto:

                          prova così la metti nell'userform

                          Ciao Alex si che ho provato 

                          Allego il File 

                          Allegati:
                          You must be logged in to view attached files.
                          #53093 Score: 0 | Risposta

                          alexps81
                          Moderatore
                            58 pts

                            alexps81 ha scritto:

                            Prova il tuo codice con almeno uno di questi controlli.

                            Ciao Oscar, forse non hai letto quanto ho detto qui!!

                            Riprova inserendo anche solo un TextBox in UserForm (che è quello che ci si aspetta da che contenga)

                            Ad ogni modo un'altra strada valida (se ci sono molti controlli (TextBox, ComboBox e ListBox), sarebbe quella di utilizzare i Moduli di Classe. Ma è un terreno da me sconosciuto   

                            #53094 Score: 0 | Risposta

                            LucaSR
                            Partecipante
                              15 pts

                              LucaSR ha scritto:

                              Ciao ricordo che in VB.NET impostando la proprietà "cancelButton" a True si otteneva quello che chiedi, però non so in VBA.

                              Ripropongo me stesso, forse non l'avete letto!!! Qualcuno che abbia il pc davanti 

                              #53095 Score: 0 | Risposta

                              Oscar
                              Partecipante
                                45 pts

                                alexps81 ha scritto:

                                alexps81 ha scritto:

                                Prova il tuo codice con almeno uno di questi controlli.

                                Ciao Alex si hai ragione se hai qualche controllo non funziona piu

                                #53096 Score: 1 | Risposta

                                LucaSR
                                Partecipante
                                  15 pts

                                  Oscar ha scritto:

                                  Ciao Alex si hai ragione se hai qualche controllo non funziona piu

                                  Questa cosa l'avevo detta poco sopra 

                                   

                                  LucaSR ha scritto:

                                  Potrebbe essere una soluzione, però se il focus è su un controllo qualsiasi, il tuo codice non funzionerà!

                                  #53097 Score: 0 | Risposta

                                  Oscar
                                  Partecipante
                                    45 pts

                                    LucaSR ha scritto:

                                    Questa cosa l'avevo detta poco sopra 

                                     

                                    LucaSR ha scritto:

                                    Potrebbe essere una soluzione, però se il focus è su un controllo qualsiasi, il tuo codice non funzionerà!

                                    Si d'accordo  , ma se hai una sola TextBox ti basta chiudere anche quella , è ovvio che se ne hai 100 non ne vale piu la pena 

                                    #53098 Score: 0 | Risposta

                                    alexps81
                                    Moderatore
                                      58 pts

                                      LucaSR ha scritto:

                                      Ciao ricordo che in VB.NET impostando la proprietà "cancelButton" a True si otteneva quello che chiedi, però non so in VBA

                                      Proprietà della UserForm

                                      #53099 Score: 0 | Risposta

                                      LucaSR
                                      Partecipante
                                        15 pts

                                        Grazie @alexps81 per il riscontro   

                                        Ma da codice con me.cancelButton non è accessibile!? Che peccato   

                                        #53100 Score: 0 | Risposta

                                        Oscar
                                        Partecipante
                                          45 pts

                                          Prova questa 

                                          Poi se il set focus si trova sulla ComboBox , bisogna disattivare anche quelle 

                                          Allegati:
                                          You must be logged in to view attached files.
                                          #53103 Score: 0 | Risposta

                                          Oscar
                                          Partecipante
                                            45 pts

                                            Qui chiudo anche se il set focus si trova nella ComboBox

                                            Allegati:
                                            You must be logged in to view attached files.
                                            #53105 Score: 0 | Risposta

                                            Oscar
                                            Partecipante
                                              45 pts

                                              Comunque a mio giudizio meglio usare la funzione di uscita  

                                              #53106 Score: 0 | Risposta

                                              alexps81
                                              Moderatore
                                                58 pts

                                                Ciao Oscar, ecco era proprio quello che intendevo! 

                                                Io non ne capisco molto di Moduli di Classe però da come immaginavo, per evitare di codificare ogni "Controllo", è meglio utilizzare i Moduli di Classe.

                                                Se mi permetti farei delle mie correzioni ...adatterei il tuo codice così:

                                                Nel Modulo della UserForm:

                                                1) anziché utilizzare un doppio ciclo FOR EACH, ne uso uno solo che verifica se il Controllo è una TextBox o una ComboBox

                                                2) dichiarazioni delle variabili ctl (come Control) e tb (come Oggetto). Come le avevi dichiarate tu erano Variant

                                                3) eliminazione di Application.ScreenUpdating = False (oltre a non essere utile, lascia l'aggiornamento dello schermo disabilitato)

                                                Option Explicit
                                                Private TextBoxes As Collection
                                                Private ComboBoxes As Collection
                                                
                                                Private Sub UserForm_Initialize()
                                                    Dim ctl As Control, tb As Object
                                                
                                                    Set TextBoxes = New Collection
                                                    Set ComboBoxes = New Collection
                                                    
                                                    For Each ctl In Me.Controls
                                                        If TypeName(ctl) = "TextBox" Then
                                                            Set tb = New ChiudiText
                                                            Set tb.cmd = ctl
                                                            TextBoxes.Add tb
                                                        ElseIf TypeName(ctl) = "ComboBox" Then
                                                            Set tb = New ChiudiCombo
                                                            Set tb.cmd = ctl
                                                            ComboBoxes.Add tb
                                                        End If
                                                    Next ctl
                                                End Sub

                                                Nel Modulo di Classe ChiudiCombo:

                                                Option Explicit
                                                Public WithEvents cmd As MSForms.ComboBox
                                                  
                                                    Private Sub cmd_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
                                                    If KeyAscii = 27 Then Unload cmd.Parent
                                                End Sub

                                                1) anziché utilizzare il metodo HIDE che nasconde la Form, utilizzo UNLOAD così da scaricarla.

                                                2) nella If KeyAscci... utilizzo il metodo Parent per risalire alla UserForm dov'è posizionato l'oggetto cmd (in questo caso la ComboBox)

                                                Nel Modulo di Classe ChiudiText:

                                                Option Explicit
                                                Public WithEvents cmd As MSForms.TextBox
                                                 
                                                    Private Sub cmd_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
                                                    If KeyAscii = 27 Then Unload cmd.Parent
                                                End Sub
                                                

                                                Stessa spiegazione data per il Modulo di Classe ChiudiCombo

                                                 

                                                #53107 Score: 0 | Risposta

                                                Oscar
                                                Partecipante
                                                  45 pts

                                                  alexps81 ha scritto:

                                                  Ciao Oscar, ecco era proprio quello che intendevo! 

                                                  Infatti pensavo anch'io a una cosa simile , ma poi l'ho fatto in fretta giusto per dare un'idea e prima cosa mica sono alla tua portata , io sono solo un principiante ai tuoi confronti

                                                  #53108 Score: 1 | Risposta

                                                  sgmmar
                                                  Bloccato
                                                    5 pts

                                                    Ciao, ovviamente liberi tutti di proporre le proprie soluzioni, ma intanto l'op tace circa la situazione al cui verificarsi gli  sorge la necessità.

                                                    Difficile proporre soluzioni ad un problema senza conoscerne la causa.....

                                                     

                                                    #53109 Score: 0 | Risposta

                                                    alfrimpa
                                                    Partecipante
                                                      33 pts

                                                      E tutto questo per non cliccare sulla “x” di chiusura della userform o su un banalissimo commandbutton “Chiudi”.

                                                      Chissà quale sarà il vantaggio.

                                                      Ai posteri l’ardua sentenza   

                                                    Login Registrati
                                                    Stai vedendo 25 articoli - dal 1 a 25 (di 39 totali)
                                                    Rispondi a: chiudere maschera con tasto ESC
                                                    Gli allegati sono permessi solo ad utenti REGISTRATI
                                                    Le tue informazioni: