› Sviluppare funzionalita su Microsoft Office con VBA › INVIO automatico alla digitazione di certi tasti
-
AutoreArticoli
-
Buongiorno,
Mi capita di dover riportare, da una tabella manuale, dei codici dentro una tabella excel che vi allego.
Nell'allegato potete vedere dei codici a due lettere AM AF oppure CM CF in realtà viene digitato o una A o una C che poi viene aggiunta una M o una F secondo se è Mercoledì o Festivo.
Insomma il codice digitato è sempre di una sola lettera A C R M o F oppure viene digitato un numero, come potete vedere.
Il mio problema è la scocciatura, quando digito una lettera è di dover sempre battere il tasto INVIO, cioè A INVIO, M INVIO, F INVIO, ...
Domanda c'è modo, quando digito di intercettare la digitazione e se ho digitato una lettera di far si che si abbia anche un INVIO automatico? per cui nella seconda colonna dell'allegato (in genere inserisco i dati per colonna) invece di digitare:
A INVIO, F INVIO, 4 INVIO, M INVIO, A INVIO, C INVIO, . INVIO, C INVIO, M INVIO
avrei digitato:
A, F, 4 INVIO, M, A, C, . INVIO, C, M
Una bella differenza, 7 INVIO in meno ... su una colonna ...
Grazie!
Allegati:
You must be logged in to view attached files.Meglio se alleghi un file si esempio. Con le immagini si fa poco. Ad ogni modo credo che stiamo parlando di evocare l'evento Change del Foglio, la funzione Intersect e la proprietà Offset di range.
è impossibile utilizzare in un modulo o nell'evento del foglio interessato,
un semplice SendKeys?
che il richiedente è invitato a studiarsi ed nel caso applicare alle Sue esigenze?
stiamo parlando di evocare l'evento Change del Foglio
Non si puo', secondo me. L'evento attende che la cella venga modificata e per ottenere questo serve premere Invio.
Vedo una sola soluzione e cioe' mimare la tabella del foglio con un userform, dove i controlli textbox possono esporre l'evento KeyUp (KeyDown, KeyPress) utili allo scopo.
per cui nella seconda colonna dell'allegato (in genere inserisco i dati per colonna) invece di digitare:
A INVIO, F INVIO, 4 INVIO, M INVIO, A INVIO, C INVIO, . INVIO, C INVIO, M INVIO
avrei digitato:
A, F, 4 INVIO, M, A, C, . INVIO, C, M
ma la virgola presumo tu non la voglia digitare, altrimenti tanto vale premere invio, giusto?
P.S. posta il codice che utilizzi ed allega il file (senza eventuali dati sensibili).
Secondo me scossa sta pensando ad Application.OnKey... a me e' venuto in mente soltanto adesso, scusate ma non sono sveglio come scossa
Questo approccio potrebbe permettere di attivare una combinazione di tasti che quando premuti lanciano una procedura specifica (non funziona con le singole lettere ma possiamo andarci vicino, il mio test funziona premendo ad esempio Shift+M e questo inserisce la M nella cella attiva).
Quindi (tanto per sparare un test):
'------------------------------------ 'codice del Foglio1 Private Sub Worksheet_Activate() Application.OnKey "+M", "onkey_M" End Sub '------------------------------------ 'codice di un Modulo standard Function onKey_M() If ActiveSheet.Name = "Foglio1" And Not Intersect(ActiveCell, Range("A1:A20")) Is Nothing Then ActiveCell = "M" End If End FunctionAdesso se nell'intervallo A1:A20 del Foglio1 io premo Shift+M, viene inserita una M maiuscola nella cella attiva. In qualunque altra cella del foglio, premere Shift+M non ha alcun effetto.
Grazie Amici! Vi sto seguendo incuriosito nelle vostre risposte, (per ora non posso provare ad applicare i vostri suggerimenti, ho problemi d'altro tipo ...).
Intanto, sto già utilizzando Intersect per trasformare p.e. una A digitata in AF se la casella in cui è inserita è in un giorno Festivo (e anche per controllare che i codici digitati siano quelli previsti).
Ma come ha detto Vecchio Frac questo avviene "dopo" aver battuto il tasto INVIO.
Mi studierò Application.OnKey come suggerito da vecchio Frac su intuizione di Scossa (no, no, la virgola non va digitata ...).
Grazie carissimi, vi farò sapere ...
E' un problema interessante noo?
Si', e' comunque interessante e abbastanza stimolante, adesso che ci penso meglio la soluzione che intercetta Shift+M ha lo svantaggio che nel foglio in cui e' attivata, se fuori dal range previsto, non scrive niente, mentre normalmente si vedrebbe la M maiuscola.
Per riottenere il comportamento normale basta un piccolo intervento sul codice del modulo:
Function onkey_M() If ActiveSheet.Name = "Foglio1" And Not Intersect(ActiveCell, Range("A1:A20")) Is Nothing Then ActiveCell = "M" Else Application.SendKeys ("{F2}{HOME}M") End If End Functionsto già utilizzando Intersect per trasformare p.e. una A digitata in AF se la casella in cui è inserita è in un giorno Festivo
Perche' Intersect? La funzione controlla semplicemente se la cella attiva rientra in un range specifico. Forse devi controllare che il giorno settimana della cella giorno di riferimento sia festivo o no. Comunque non butto troppe castagne sul tuo fuoco... fai i tuoi esperimenti e poi, come gia' e' stato detto, allega file e descrivi i problemi che incontri.
Ciao Francesco,
Secondo me scossa sta pensando ad Application.OnKey...
in realtà no, ma resto in attesa che l'OP posti il codice ed alleghi il file ....
Credo che nell'attesa possiamo farci una bevuta insieme
ma ero curioso di sentire cosa avresti escogitato. Secondo me, non e' realizzabile senza qualche barbatrucco
#51031
Pochi post più sopra,
avevo segnalato la possibilità dell'utilizzo di
SendKeys
avevo segnalato la possibilità dell'utilizzo di
SendKeys
Si' e hai fatto bene, infatti per un'estensione della funzione del mio suggerimento ne ho ipotizzato anch'io un utilizzo.
Peccato che non hai indicato come utilizzare l'istruzione nel caso del richiedente, per l'OP dire "puoi usare SendKeys" e' dirgli qualcosa che non sa se e come puo' essergli utile, credo sia per questo che non hai ottenuto un riscontro.
vecchio frac ha scritto:
Peccato che non hai indicato come utilizzare l'istruzione nel caso del richiedente, per l'OP dire "puoi usare SendKeys" e' dirgli qualcosa che non sa se e come puo' essergli utile, credo sia per questo che non hai ottenuto un riscontro.
in attesa che lo staff esegua la mia richiesta di cancellazione del mio account,
scusami, sicuramente per mia incapacità,
ma continuo a non "capire" che messaggio vuoi "passarmi"
di seguito come la vedo io:
14/01/2025 ore 13:56 fsm ha scritto
in questa discussione
https://www.excelvba.it/forumexcel/forums/discussione/invio-automatico-alla-digitazione-di-certi-tasti/cit.
è impossibile utilizzare in un modulo o nell'evento del foglio interessato,
un semplice SendKeys?
che il richiedente è invitato a studiarsi ed nel caso applicare alle Sue esigenze?15/01/2025 ore 18:42 vecchio frac ha scritto
in questa discussione
https://www.excelvba.it/forumexcel/forums/discussione/errore-misterioso/cit.
un modo per ricordare che questo forum non si presta a offrire consulenza gratuita fine a se stessa,
ma si cerca di stimolare l'autoapprendimento.ma continuo a non "capire" che messaggio vuoi "passarmi"
Nessun messaggio
solo differente metodologia didattica...Io penso che non posso buttare li' un "esiste <statement>, cercatelo e imparatelo" e pensare che l'utente alle prime armi sappia anche solo come si fa una ricerca nella guida; e' diverso dal dire che "esiste <statement>, e ti offro un esempio da studiare" (in autoapprendimento).
Ma ripeto che e' una metodologia che applico io, mica vuol dire che ho ragione
Vorrei spezzare una lancia a favore di @fsm, con questo capisco il tuo punto di vista BOSS
Quando iniziai a programmare in OOP, tanto tempo fa, i forum che seguivo non mi davano MAI la pappa pronta ma adottavano i suggerimenti tipo "prova con SendKey".
Dopo svariate ricerche, stilavo il coding e lo postavo. Da li, mi venivano dati tutti i suggerimenti a riguardo, se avevo sbagliato o come meglio ottimizzare il coding stesso.
Da quando ho riniziato a frequentare i forum ho visto che le cose sono cambiate, non poco!!
Oramai gli utenti vogliono risolvere subito, non si ha più la voglia di imparare e ci si affida a chi di buon cuore gli risolvi i problemi
diverso dal dire che "esiste <statement>, e ti offro un esempio da studiare" (in autoapprendimento).
per quel che so, l'esempio è fornito dalla guida del vba di Excel
sia nella guida off line di vba 2007 e penso precedenti, che da quella on line sulle versioni successive.
ot
puoi mettere una buona parola con lo staff?
quasi una settimana per cancellare un partecipante, non succede neanche nella ditta scalcagnata dove lavoro....
quasi una settimana per cancellare un partecipante, non succede neanche nella ditta scalcagnata dove lavoro....
Magari evitando di fare il login, aiuterebbe
solo differente metodologia didattica...
a Roma dicono: vamose a capì...
da una parte dici che il forum non deve fornire minuziosa e forse... risolutiva assistenza
al fine di invogliare l'autoapprendimento degli OP,
e dall'altra che chi è disponibile, deve fornire esempi esaustivi che sono già presenti nella guida e da
ogni utilizzatore del software consultabili?
Magari evitando di fare il login, aiuterebbe
grazie Luca, OTTIMO consiglio, vedrò di seguirlo
il fatto è che certe spiegazioni.... gridano ulteriori chiarimenti.
prometto di cercare di seguire il tuo prezioso suggerimento.
Nel caso, la buona parola la chiederò a te
da una parte dici che il forum non deve fornire minuziosa e forse... risolutiva assistenza
al fine di invogliare l'autoapprendimento degli OP,
e dall'altra che chi è disponibile, deve fornire esempi esaustivi che sono già presenti nella guida e da
ogni utilizzatore del software consultabili?
Ma io ho gia' detto che nel tempo, nel lungo tempo della mia esperienza in forum, cambiato numerose volte il mio atteggiamento, da quello piu' disponibile e sfrenatamente pappaprontista a quello piu' sfaccciatamente e ostinatamente attendista. Le ho sperimentate tutte e quindi parlo con cognizione di causa. Ripeto pero' che e' la mia esperienza, non e' quella giusta e forse nemmeno quella sbagliata: dipende da chi hai davanti, da come si pone e anche dal contesto, non ultimo dipende anche dalle mie vicende personali. Del resto non ho mai preteso da nessuno di essere pronto a fornire esempi esaustivi eccetera, questo lo hai detto tu.
Sulla tua cancellazione dal forum, io non ho questo superpotere ma contattero' Admin.
ciao
vorrei dire la mia anche se con le formule è tutto più semplice.
il forum non è il/la CEPU
nel forum il 90% di chi fa richieste non gliene frega una mazza di imparare
quei pochi a cui interessa si studiano la macro/formula proposta.
Io se riesco rispondo a tutti sia sistemando le formule che utilizzano sia proponendo altre versioni
per me più congeniali.
poi vuoi imparare te la studi non vuoi...e chi se ne frega
NB
quel poco che so l'ho imparato dai forum (dalle spiegazioni microsoft o dai libri non impari tutte le concatenazioni
che si fanno con le formule)
ma io avevo intenzione di imparare altrimenti sarei ancora in difficoltà
con il cerca verticale.
in tutti i forum ci sono le due correnti di pensiero
E' da un po' che volevo dirti, ma non ne avevo l'occasione, che mi hanno finalmente installato Office 365 in ufficio. Per me un salto stratosferico (da Office 2007, capirai). Adesso sto imparando diverse nuove formule in Excel e devo dire, alcune veramente semplificano e accelerano (a cominciare da LET che trovo fantastica).
ciao
ti regalo dei file sono in inglese ma le formule vengono tradotte in italiano (per fortuna
)tu dovresti andare a nozze con LAMBDA che sostituisce di fatto
le funzioni
Allegati:
You must be logged in to view attached files.Ma io ho gia' detto che nel tempo, nel lungo tempo della mia esperienza in forum, cambiato numerose volte il mio atteggiamento, da quello piu' disponibile e sfrenatamente pappaprontista a quello piu' sfaccciatamente e ostinatamente attendista. Le ho sperimentate tutte e quindi parlo con cognizione di causa.
Onore al merito!
questo l'ho visionato più volte nei post nello storico.
Ma non vorrei essere richiamato da LucaSR e sperando di dimenticare la password di accesso
confermo questo mio post come ultimo.
Non dimenticare di contattare lo Staff per la mia cancellazione.
grazie
Ma non vorrei essere richiamato da LucaSR e sperando di dimenticare la password di accesso
Io non richiamo nessuno, sia perché non è il mio compito e sia perché alla fine non mi cambia niente
Quello che tu hai preso come consiglio non lo era, era un modo sarcastico di ribadire quello che ti ho detto in un altro post, almeno penso.
Mi sembra esagerato abbandonare il forum soltanto perché ti si è fatto notare qualcosa.
-
AutoreArticoli
