Sviluppare funzionalita su Microsoft Office con VBA intercettare tasto invio

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

    cristiano67
    Partecipante

      Salve mi chiamo Cristiano e sono nuovo del forum (chiedo scusa ma nn trovo la sezione "presentazioni")

      Mi diletto a programmare e non ho mai utilizzato VBA (il fratello maggiore si)
      Il mio quesito...

      Per impostazione predefinita, quando si digitano le informazioni in Excel e quindi premere “Invio”, Excel sposta la casella di selezione di una cella verso il basso.
      Ecco a me interesserebbe spostare il cursore a destra alla pressione del tasto invio (sia quello del tasterino numerico che quello della tastiera normale) ovvio vorrei sapere se è possibile farlo da codice VBA  e non da impostazioni Excel

      Grazie in anticipo per le vs risposte 

       

      #19354 Score: 1 | Risposta

      vecchio frac
      Senior Moderator
        272 pts

        Ciao e benvenuto,

        ci sono almeno un paio di strade, potresti scrivere codice nell'evento SelectionChange di un foglio. Quando cambi la selezione forzi lo spostamento a destra. L'inconveniente è che questo evento si scatena anche quando ti sposti col mouse, per cui occorre scrivere qualche riga di codice in più (per intercettare per esempio uno spostamento di molte celle rispetto alla posizione iniziale).

        Una alternativa consiste nell'impostare correttamente l'evento di tastiera con Application.OnKey, per intercettare il tasto invio o il tasto Tab o uno dei tasti di movimento.

        #19359 Score: 0 | Risposta

        Mister_x

          ciao

          comando per spostamento cursore tramite i tasti Invio

          Application.MoveAfterReturnDirection = xlToRight 'destra
          Application.MoveAfterReturnDirection = xlDown ''in giu'
          Application.MoveAfterReturnDirection = xlUp '' in su
          Application.MoveAfterReturnDirection = xlToLeft '' a sinistra

          PS  ricordati prima di uscire di rimettere a posto la direzione del cursore

          ciao

          #19363 Score: 1 | Risposta

          vecchio frac
          Senior Moderator
            272 pts

            Bravo Mister_x, così è più semplice   

            #19367 Score: 0 | Risposta

            cristiano67
            Partecipante

              Grazie per le risposte e per la semplicità mister x, ma da mente contorta di noi programmatori (    ) mi piacerebbe anche gestire gli eventi come ha scritto vecchio frac. A tal proposito, siccome ho gia scritto che VBA nn è mai stato motivo di studio o altro, ma oggi per curiosità (e per fare un piacere alla mia compagna) mi interessa, Vecchio frac mi dai qualche indzio su cosa ricercare?

              "SelectionChange " ho guardato ieri scrivendo qualcosa e osservando con il debug cosa scatena... ho notato che anche  se starnutisci si scatena, da pollo credevo che esistesse "VbKeyReturn" per confrontare la variabile "Target" , ma purtroppo determinati argomenti excel non li ha

              Application.OnKey ... da leggere sicuro
              Uff dopo anni e tosta confesso ^^
              Ancora grazie e buona giornata

              #19368 Score: 0 | Risposta

              vecchio frac
              Senior Moderator
                272 pts

                Poichè VBA è il cugino povero di VB6 non dovresti aver grossi problemi a mutuarne sintassi e grammatica. L'unica difficoltà è la confidenza con l'editor (più povero rispetto agli altri sistemi) e la comprensione del modello ad oggetti specifico per ogni applicazione (Word ha i propri oggetti, Excel altri, Access ancora altri), ma c'è anche la base comune.

                Potrai trovare utile consultare il visualizzatore oggetti (tasto F2 nell'editor).

                SelectionChange viene intercettato ogni volta che cambi cella, mentre per verificare il contenuto della cella puoi utilizzare il metodo Worksheet_Change (quando modifichi una cella). Non si va più in profondità (non puoi gestire gli eventi di singolo tasto in modalità edit cell, cosa che puoi fare dentro una userform a livello di controllo textbox, per esempio).

                La costante vbKeyReturn naturalmente esiste (ha valore 13, pensa un po' 🙂 ) ma si usa nel contesot cui ho appena accennato. Target è un oggetto di tipo Range, che espone quindi metodi e proprietà di un Range (ha un Address e un Value, puoi invocare un Copy, ecc. nella forma "Target.proprietà" o "Target.metodo").

                Se ho un attimo provo a scrivere qualcosa di decente per verificare se regge quello che ho scritto ieri 🙂

                #19369 Score: 0 | Risposta

                vecchio frac
                Senior Moderator
                  272 pts

                  Se sei in Foglio1 e vuoi spostarti a destra della cella corrente dopo averne editato il contenuto:

                  Option Explicit
                  
                  Private Sub Worksheet_Change(ByVal Target As Range)
                      Target.Offset(, 1).Select
                  End Sub

                  Dovrebbe bastare questo.

                  Intercettare i singoli tasti di consolidamento (invio, tab, le frecce direzionali, pag su e pag giù) è un po' controindicato perchè l'intercettazione accade anche se non stai editando una cella, quindi vedresti il cursore spostarsi invariabilmente a destra della cella attiva sempre, anche senza editare la cella.

                  Prova:

                  Option Explicit
                  
                  Private Sub kbd_stuff()
                      With Application
                          .OnKey "{RETURN}", "go_right"
                          .OnKey "{LEFT}", "go_right"
                          .OnKey "{UP}", "go_right"
                          .OnKey "{DOWN}", "go_right"
                          .OnKey "{PGUP}", "go_right"
                          .OnKey "{PGDN}", "go_right"
                      End With
                  End Sub
                  
                  Private Sub kbd_normal()
                      With Application
                          .OnKey "{RETURN}"
                          .OnKey "{LEFT}"
                          .OnKey "{UP}"
                          .OnKey "{DOWN}"
                          .OnKey "{PGUP}"
                          .OnKey "{PGDN}"
                      End With
                  End Sub
                  
                  Sub go_right()
                      Selection.Offset(, 1).Select
                  End Sub

                  E' importante lanciare kbd_normal prima di uscire da Excel altrimenti... bè, prova :o)

                  #19389 Score: 0 | Risposta

                  cristiano67
                  Partecipante

                    Grazie appena possibile, quando ritorno a casa  provo 

                    di nuovo grazie

                    ps si lo so che vba è la versione lite di vb dot net,  ma è anche vero che il fratello grande agevola con tutte quelle possibilità, poi sarò io vecchio stampo 👍😉😉😉

                    di nuovo grazie 

                    #19571 Score: 0 | Risposta

                    cristiano67
                    Partecipante

                      Buongiorno e grazie per l'aiuto che mi avete dato, chiedo scusa per il ritardo nel ringraziarVi
                      Grazie a voi ho risolto, ora mi rimane solo da ampliare la conoscenza in VBA, anche se solo per hobby e conoscenza nn per altro

                      Buon week-end a tutti 

                    Login Registrati
                    Stai vedendo 9 articoli - dal 1 a 9 (di 9 totali)
                    Rispondi a: intercettare tasto invio
                    Gli allegati sono permessi solo ad utenti REGISTRATI
                    Le tue informazioni: