› Sviluppare funzionalita su Microsoft Office con VBA › Spostamento delle stato attivo attivo tra form e applicazione
-
AutoreArticoli
-
buon giorno,
ho aperto un form con vari pulsanti e caselle di testo.
Ad una casella di testo ho applicato del codice all'evento doubleClick.
Alla fine della routine, vorrei posizionare lo stato attivo in una cella del foglio excel, in modo da poter digitare direttamente dei dati.
Invece lo stato attivo mi rimane nella casella di testo in cui ho appena fatto il doppio click, e qual ora digitassi qualcosa verrà scritto sulla casella di testo del form. Volendo scrivere sulla cella devo prima cliccare sull'applicazione.
Come posso fare?
grazie
Devi aprire la userform in modalità vbModeless in modo da poter agire anche sul foglio.
Io posso già scrivere sul mio foglio excel, mentre il form è attivo, vorrei solo che alla fine della routine, sia già attiva la cella in cui devo scrivere senza doverla selezionare.
Nel caso in cui non seleziono la cella, quello che digito da tastiera, viene scritto nella casella di testo andando a cancellare quello che c'è scritto dentro.
Ciao
Forse è meglio se alleghi il file (senza dati sensibili)
Ciao,
Mario
Io posso già scrivere sul mio foglio excel, mentre il form è attivo, vorrei solo che alla fine della routine, sia già attiva la cella in cui devo scrivere senza doverla selezionare.
Alla fine della routine devi selezionare la cella utilizzando il metodo Select. Esempio:
Range("A1").SelectE' proprio questo il problema, anche scrivendo :
Range("A1").Select
il focus resta attivo sul form.
Io compilo il form riempendo delle caselle di testo. Con invio passo da una casella all'altra, con l'ultimo invio il focus che nel frattempo si è spostato su un pulsante, avvia la macro. Dopo che la macro ha fatto quello che deve fare, si posiziona sulla cella del foglio di lavoro excel in cui devo continuare a digitare altri dati da tastiera. Invece, rimanendo il focus attivo sul form, devo lasciare la tastiera, prendere il mouse per cliccare sulla cella del foglio di lavoro per poi riprendere la digitazione.
Siccome è un ciclo continuo questa operazione diventa fastidiosa. Pensavo fosse facile da ovviare, invece non riesco
il focus resta attivo sul form.
Allora prova prima a selezionare il foglio, sempre con Select:
Thisworkbook.Sheets("NOMEFOGLIO").SelectAllora devi allegare il file in modo che si possa provare e trovare la soluzione.
Allegare l'esempio reale sarebbe troppo complesso.
Semplifico al massimo per chiarire meglio il problema.
tramite il pulsante 'Form' attivo il form.
clicco su casella A, e lascio il mouse perchè dovrò inserire dati da tastiera
digito un numero in A
premo invio e lo stato attivo si sposta in B
digito un numero in B
premo invio e lo stato attivo si sposta sul pulsante di comando 'CALCOLA'
premo invio una seconda volta. Viene elaborata la macro che copia i dati ed esegue l'operazione
alla fine la macro attiva la cella nella colonna 'commento' dove dovrei proseguire ad inserire altri dati avendo ancora le mani sulla tastiera.
Invece devo lasciare la tastiera per prendere il mouse, attivare la cella e proseguire a digitare i dati successivi.
Alla fine dovrò sempre cliccare sul form per riattivarlo ed eseguire i successivi inserimenti, ma quanto meno dimezzo le volte che devo lasciare la tastiera per prendere in mano il mouse.
Spero questa volta che sia più chiaro.
grazie
Allegati:
You must be logged in to view attached files.Ciao
1) potresti provare a creare qualcosa di simile all'originale ma molto più snello ed allegarlo. Così come esponi il problema e dopo quello che ha suggerito @alfrimpa (ciao Alfredo) mi viene oltremodo difficile capire dove può nascondersi l'inghippo.
2) tenendo conto di questa frase "Viene elaborata la macro che copia i dati ed esegue l'operazione alla fine la macro attiva la cella nella colonna 'commento' " probabilmente dovresti inserire qui il suggerimento di Alfredo, ovviamente con .Select
Ciao,
Mario
Spero questa volta che sia più chiaro.
Adesso sì.
Modifica la tua routine così:
Private Sub cmdCalcola_Click() tot = txtA + txtB r = Cells(1, 1).End(xlDown).Row + 1 If r > 1000000 Then r = 2 Cells(r, 1) = txtA Cells(r, 2) = txtB Cells(r, 3) = txtA + txtB Cells(r, 4).Select ' aggiungi Me.txtA.Text = "" Me.txtB.Text = "" Me.txtA.SetFocus End SubPerò se prevedi anche di inserire un commento allora devi aggiungere un textbox per inserirlo.
A me così funziona benissimo.
Me.txtA.SetFocusma il Me. per cosa sta?
inoltre così facendo, io sposto il focus sulla casella di testo A e non sulla cella in colonna D del foglio di calcolo.
Quello che io vorrei è una sequenza che faccia:
1.Digita 1 nella casella di testo A (compare 1 in colonna A)
2.premi invio da tastiera (focus si sposta su casella B)
3. digita 1 nella casella di testo B (compare 1 in colonna B)
4.premi invio da tastiera (focus si sposta sul pulsante 'CALCOLA')
5.premi invio da tastiera (compare 11 in colonna D)
6.premi A sulla tastiera (compare la lettera A in colonna D)
invece se voglio ottenere il punto 6 devo, dopo il punto 5, prendere il mouse e cliccare sul foglio di lavoro per poi eseguire il punto 6 e ottenere il risultato scritto.
ma il Me. per cosa sta?
inoltre così facendo, io sposto il focus sulla casella di testo A e non sulla cella in colonna D del foglio di calcolo.
Quello che io vorrei è una sequenza che faccia:
1.Digita 1 nella casella di testo A (compare 1 in colonna A)
2.premi invio da tastiera (focus si sposta su casella B)
3. digita 1 nella casella di testo B (compare 1 in colonna B)
4.premi invio da tastiera (focus si sposta sul pulsante 'CALCOLA')
5.premi invio da tastiera (compare 11 in colonna D)
6.premi A sulla tastiera (compare la lettera A in colonna D)
invece se voglio ottenere il punto 6 devo, dopo il punto 5, prendere il mouse e cliccare sul foglio di lavoro per poi eseguire il punto 6 e ottenere il risultato scritto.
Quando la userform è attiva non è possibile scrivere sul foglio SE NON LO SELEZIONI COL MOUSE (una soluzione sarebbe aggiungere un'altra TextBox collegata alla colonna D)
Allegati:
You must be logged in to view attached files.6.premi A sulla tastiera (compare la lettera A in colonna D)
Ti avevo già detto che per questo devi aggiungere un TextBox per la colonna D (Commento).
Non hai letto con attenzione?!
Quando la userform è attiva non è possibile scrivere sul foglio SE NON LO SELEZIONI COL MOUSE (una soluzione sarebbe aggiungere un'altra TextBox collegata alla colonna D)
in realtà la mia necessità era proprio quella di scrivere sul foglio senza doverlo selezionare. Il fatto di aggiungere il textbox nel mio caso reale non va bene.
considero questa risposta quella buona
comunque grazie
-
AutoreArticoli
