› Sviluppare funzionalita su Microsoft Office con VBA › intercettare tasto invio
-
AutoreArticoli
-
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 ExcelGrazie in anticipo per le vs risposte
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.
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 sinistraPS ricordati prima di uscire di rimettere a posto la direzione del cursore
ciao
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 giornataPoichè 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 🙂
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 SubDovrebbe 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 SubE' importante lanciare kbd_normal prima di uscire da Excel altrimenti... bè, prova :o)
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
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 altroBuon week-end a tutti
-
AutoreArticoli
