Digitazione Spostamento Automatico



  • Digitazione Spostamento Automatico
    di Paolo (utente non iscritto) data: 21/07/2014 19:56:04

    Buona sera a Tutti
    volevo chiederti quale scripts usare:
    per spostare in automatico da una cella alla sottostante digitando numeri compresi tra 0 e 8 senza uso di: invio o frecce o mouse

    in un range ad esempio "B18:M59"

    Grazie mille per l'aiuto
    Paolo



  • di lepat (utente non iscritto) data: 21/07/2014 20:26:23

    lo scopo ? come si correggono gli errori di digitazione ?



  • di giuseppeMN (utente non iscritto) data: 22/07/2014 08:20:20

    Buona giornata, Paolo;
    sono un nuovo iscritto, quindi, chiedo la Tua clemenza se la mia risposta non è adeguata alla Tua Richiesta.

    Ho pensato di legare l'esecuzione ad un evento:
    Worksheet_Change

    Ho fissato i limiti, come da Te richiesto, compresi tra 0 ÷ 8; ovviamente, è possibile variare questi limiti anche con valori negativi.

    A disposizione.

    Buon lavoro e buona serata.

    Giuseppe
     
    Option Explicit
    Private Sub Worksheet_Change(ByVal Target As Range)
    On Error GoTo 10
        If Target.Value < 0 Or Target.Value > 8 Then Exit Sub
        If Not Intersect(Target, Range("B18:M59")) Is Nothing Then Cells(Target.Row + Target.Value, Target.Column).Select
    10:
    End Sub



  • di lepat (utente non iscritto) data: 22/07/2014 08:31:38

    Worksheet_Change implica l'uso di Invio, del mouse o delle frecce



  • di lepat (utente non iscritto) data: 22/07/2014 09:37:07

    Anche se non capisco l'utilità, allego un esempio di soluzione (onkeyspeciale) per i numeri da 0 a 5



  • di tanimon data: 22/07/2014 23:49:44

    ciao
    sono d'accordo con Lepat circa l'utilità, ho comunque fatto poche modifiche al suo file
    per i soli numeri "0" e "1"

     
    Private Sub Worksheet_Activate() 'nel modulo del foglio1
    Application.OnKey "0", "zero"
    Application.OnKey "1", "uno"
    End Sub
    
    Public Sub zero() 'in un modulo standard
      ActiveCell.Value = 0
      ActiveCell.Offset(1, 0).Select
    End Sub
    
    Public Sub uno() 'in un modulo standard
      ActiveCell.Value = 1
      ActiveCell.Offset(1, 0).Select
    End Sub



  • di giuseppeMN (utente non iscritto) data: 23/07/2014 08:26:14

    Buona giornata;
    avrei rinunciato volentieri a continuare questa discussione, ma, visto che la cosa prosegue, corre obbligo qualche precisazione.

    - Per quanto concerne l'utilità, non sarò certo io a metterla in discussione; l'Utente chiede una soluzione e questo e quanto.
    - Per quanto concerne l'utilizzo di "Worksheet_Change", non è che non si conosca "Application.OnKey", semplicemente ho preferito utilizzare "Worksheet_Change" perchè, modificando semplicemente:
    - If Target.Value < 0 Or Target.Value > 8 Then Exit Sub
    o elimandolo del tutto, è possibile inserire valori negativi o > 9

    È pur vero che la richiesta riguarda:
    Paolo scrive:
    ... per spostare in automatico da una cella alla sottostante digitando numeri compresi tra 0 e 8 senza uso di: invio o frecce o mouse.
    ma, non mi sembrava così tragico consentire l'azione dopo un semplice "Invio".

    Detto ciò, una procedura corretta potrebbe essere quella sotto riportata:

    In questo modo non c'è nemmeno bisogno di attivare o disattivare "con il mouse!" l'attivazione / disattivazione di Application.OnKey

    Per Tanimon (che saluto);
    credo sia da rivedere:
    Public Sub zero() 'in un modulo standard
    ActiveCell.Value = 0
    ActiveCell.Offset(1, 0).Select
    End Sub
    in:
    Public Sub zero() 'in un modulo standard
    ActiveCell.Value = 0
    ActiveCell.Offset(0, 0).Select
    End Sub

    Tanto è dovuto.

    A disposizione.

    Buona serata.

    Giuseppe

     
    Option Explicit
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Key_Off
    If Not Intersect(Target, Range("B18:M59")) Is Nothing Then Key_On
    End Sub
    
    Option Explicit
    Sub Key_On()
    Application.OnKey 0, "Zero"
    Application.OnKey 1, "Uno"
    Application.OnKey 2, "Due"
    Application.OnKey 3, "Tre"
    Application.OnKey 4, "Quattro"
    Application.OnKey 5, "Cinque"
    Application.OnKey 6, "Sei"
    Application.OnKey 7, "Sette"
    Application.OnKey 8, "Otto"
    End Sub
    
    Sub Key_Off()
    Application.OnKey 0
    Application.OnKey 1
    Application.OnKey 2
    Application.OnKey 3
    Application.OnKey 4
    Application.OnKey 5
    Application.OnKey 6
    Application.OnKey 7
    Application.OnKey 8
    End Sub
    
    Sub Zero()
      ActiveCell.Offset(0, 0).Select
    End Sub
    Sub Uno()
     ActiveCell.Offset(1, 0).Select
    End Sub
    Sub Due()
      ActiveCell.Offset(2, 0).Select
    End Sub
    Sub Tre()
     ActiveCell.Offset(3, 0).Select
    End Sub
    Sub Quattro()
      ActiveCell.Offset(4, 0).Select
    End Sub
    Sub Cinque()
      ActiveCell.Offset(5, 0).Select
    End Sub
    Sub Sei()
     ActiveCell.Offset(6, 0).Select
    End Sub
    Sub Sette()
      ActiveCell.Offset(7, 0).Select
    End Sub
    Sub Otto()
      ActiveCell.Offset(8, 0).Select
    End Sub



  • di tanimon data: 23/07/2014 08:45:21

    buon giorno a tutti,
    ciao Giuseppe,
    non ho testato i tuoi suggerimenti,
    ma se rileggi il post di apertura, la richiesta concerne il fatto di digitare un numero da 1 a 8 e
    SPOSTARSI sulla cella sottostante.
    Quindi, necessariamente, dopo la pressione del tasto (ad esempio, 0):
    ActiveCell.Value = 0
    ActiveCell.Offset(1, 0).Select

    Buona giornata



  • di lepat (utente non iscritto) data: 23/07/2014 10:20:51

    sara inutile, ma divertente questa discussione, una volta raggiunta l'ultima riga del range occorrerà cambiare colonna, quindi allego un nuovo file "lepat" che tiene conto dei vari suggerimenti



  • di giuseppeMN (utente non iscritto) data: 23/07/2014 18:27:44

    Buona sera Tanimon;
    dopo la nostra chiaccherata telefonica di questa mattina, mi sorge un dubbio; non vorrei mai che la Tua interpretazione fosse quella corretta.

    Nella mia proposta, come puoi ben vedere, avevo considerato che il cursore dovesse spostarsi nelle Celle sottostanti in funzione della quantità digitata.
    Mi spiego:
    - digito 0 (Zero), il cursore rimane fermo
    - digito 1, il cursore si sposta nella Cella sottostante
    - digito 8, il cursore si sposta di 8 Celle sottostanti

    Ora se la Tua interpretazione è quella corretta, non capisco proprio la richiesta.
    È sufficiente, nelle impostazioni, indicare la direzione ↓ del cursore dopo "Invio"; o forse il tasto "Invio" ... non è funzionante?

    Credo che non ci resti altro da fare se non restare in religiosa attesa delle precisazioni da parte di Paolo (che saluto) per capire quale sia la corretta interpretazione.

    Nel caso in cui Tu abbia ragione, e ... il tasto "Invio" sia funzionante, la domanda sorge spontanea:
    ... a Chi devo chiedere la restituzione del tempo che ho dedicato a questa Discussione?

    Buona serata.

    Giuseppe



  • di lepat (utente non iscritto) data: 23/07/2014 18:42:05

    paolo ha detto senza uso di: invio o frecce o mouse
    è inutile proporre soluzioni che prevedono l'invio, probabilmente ci sarebbe riuscito anche lui in quel modo


  • Digitazione Spostamento Automatico
    di Paolo (utente non iscritto) data: 23/07/2014 19:11:21

    Buona Sera a tutti
    dovrebbe in teoria funzionare che cliccando numeri compresi tra 0 e 8, man mano vengo inseriti in una nuova cella sottostante

    ho apportato alcune correzioni. il tastierino numerico della tastiera non funzione con la "OnKey", funziona solo con i numeri posti sopra i caratteri QWERTY, credevo di utilizzare on .OnKey 96 a 104 ma non fungono :)

    per lo spostamento in automatico tra colonne pensavo di utilizzare codice tipo, che al raggiungimento del 50 valore mi ritorna in alto
    Option Explicit

    Private Sub Worksheet_Change(ByVal Target As Range)
    Range As String
    With Target
    If Target.Row < 50 Then
    Target.Offset(1, 0).Select
    ElseIf Target.Row = 50 Then
    Target.Offset(-49, 1).Select
    End If
    End With
    End Sub

     
    Option Explicit
    Private Sub Worksheet_Change(ByVal Target As Range)
    On Error GoTo ErrWorksheet_SelectionChange
    Key_Off
    If Not Intersect(Target, Range("A1:M59")) Is Nothing Then Key_On
    
    ExitWorksheet_SelectionChange:
        Exit Sub
        
    ErrWorksheet_SelectionChange:
        Resume ExitWorksheet_SelectionChange
    End Sub
    
    
    Option Explicit
    Sub Key_On()
    Application.OnKey 0, "Zero"
    Application.OnKey 1, "Uno"
    Application.OnKey 2, "Due"
    Application.OnKey 3, "Tre"
    Application.OnKey 4, "Quattro"
    Application.OnKey 5, "Cinque"
    Application.OnKey 6, "Sei"
    Application.OnKey 7, "Sette"
    Application.OnKey 8, "Otto"
    Application.OnKey 96, "Zero"
    Application.OnKey 97, "Uno"
    Application.OnKey 98, "Due"
    Application.OnKey 99, "Tre"
    Application.OnKey 100, "Quattro"
    Application.OnKey 101, "Cinque"
    Application.OnKey 102, "Sei"
    Application.OnKey 103, "Sette"
    Application.OnKey 104, "Otto"
    
    End Sub
    
    Sub Key_Off()
    Application.OnKey 0
    Application.OnKey 1
    Application.OnKey 2
    Application.OnKey 3
    Application.OnKey 4
    Application.OnKey 5
    Application.OnKey 6
    Application.OnKey 7
    Application.OnKey 8
    Application.OnKey 96
    Application.OnKey 97
    Application.OnKey 98
    Application.OnKey 99
    Application.OnKey 100
    Application.OnKey 101
    Application.OnKey 102
    Application.OnKey 103
    Application.OnKey 104
    
    
    End Sub
    
    
    Sub Zero()
      ActiveCell.Offset(1, 0).Select
      ActiveCell.FormulaR1C1 = "0"
    End Sub
    Sub Uno()
     ActiveCell.Offset(1, 0).Select
     ActiveCell.FormulaR1C1 = "1"
    End Sub
    
    Sub Due()
      ActiveCell.Offset(1, 0).Select
      ActiveCell.FormulaR1C1 = "2"
    End Sub
    Sub Tre()
     ActiveCell.Offset(1, 0).Select
     ActiveCell.FormulaR1C1 = "3"
    End Sub
    Sub Quattro()
      ActiveCell.Offset(1, 0).Select
      ActiveCell.FormulaR1C1 = "4"
    End Sub
    Sub Cinque()
      ActiveCell.Offset(1, 0).Select
      ActiveCell.FormulaR1C1 = "5"
    End Sub
    Sub Sei()
     ActiveCell.Offset(1, 0).Select
     ActiveCell.FormulaR1C1 = "6"
    End Sub
    Sub Sette()
      ActiveCell.Offset(1, 0).Select
      ActiveCell.FormulaR1C1 = "7"
    End Sub
    Sub Otto()
      ActiveCell.Offset(1, 0).Select
      ActiveCell.FormulaR1C1 = "8"
    End Sub
    



  • di Vecchio Frac data: 23/07/2014 19:20:08

    Questa precisazione è diversa dal quesito iniziale... non avevi detto che volevi anche inserire il tasto pigiato ^_^

    Suggerisco di studiare un modo per parametrizzare l'invocazione delle routine specifiche (per scriverne una sola invece che tante tutte uguali).
    E l'uso dei codici ASCII nelle parentesi graffe per i tasti numerici del tastierino:
    Application.OnKey "{103}", "Sette" 'intercetta il tasto 7 del tastierino





  • di Paolo (utente non iscritto) data: 23/07/2014 19:52:43

    Scusa, ero un po di fretta e non avevo precisato il tutto Vecchio Frac



  • di giuseppeMN (utente non iscritto) data: 23/07/2014 19:53:09

    Chiedo scusa a Vecchio Frac (che saluto), ma credo che una precisazione sia d'obbligo.

    @lepat
    Basta guardare la soluzione che ho proposto per capire che non c'è bisogno di alcun:
    Invio o frecce o mouse.

    Se vogliamo, l'interpretazione che avevo dato alla richiesta, era diversa, ma la struttura della proposta era assolutamente coerente con la richiesta; anzi, ripeto, non si doveva nemmeno premere, "con il mouse!", i Pulsanti per attivare o disattivare Application.OnKey.
    Quelli, si,a meno di possedre proprietà divinatore, dovevano essere necessariamente attivati con il mouse.

    Detto ciò, non desidero assolutamente dare adito a diatribe futili e inutili.

    Contestualmente, a margine di quanto sopra, vorrei chiedere, cortesemente, ai Moderatori:
    "visto che la mia richiesta di iscrizione inviata in data 22 luglio 2014, non ha avuto seguito, di soprassedere."

    Sono già impeganto in altri Forum e credo che, considerati gli interlocutori, ciò basti.

    Tanto è dovuto.

    Grazie dell'attenzione.

    Giuseppe



  • di Vecchio Frac data: 23/07/2014 20:36:18

    @giuseppeMN
    cit. "Contestualmente, a margine di quanto sopra, vorrei chiedere, cortesemente, ai Moderatori: "
    ---> Se la procedura di attivazione automatica non è andata a segno bisogna sentire l'Amministratore (che però in questo periodo è in ferie). Prova a mandargli un messaggio mediante il modulo di contatto.

    Sul resto, cioè nel merito, ogni interpretazione è accettabile, soprattutto quando le richieste non sono precise fin dall'inizio :)

    @Paolo
    Normale... Di solito le precisazioni e i dettagli avvengono sempre dopo che la discussione è iniziata, perchè non si pensa mai a dettagliare abbastanza :)





  • di giuseppeMN (utente non iscritto) data: 23/07/2014 22:57:43

    Buona sera, Vecchio Frak;
    innanzi tutto grazie dell'attenzione.

    Credo di essere abbastanza navigato per capire quanto è difficile per chi chiede un parere essere preciso nelle richieste. Questo, se vogliamo, fa parte del gioco.

    Quello che ho difficoltà ad accettare sono gli interlocutori che credono di poter pontificare a prescindere.

    Ben vengono le obiezioni, ma queste, ritengo debbano essere partecipate da chi ha iniziato la Discussione o da un Moderatore; non certo da chi si arroga la Funzione di Moderatore senza esserne autorizzato.

    Quando, in modo inequivocabile, mi rivolgo a un Utente, in questo caso Tanimon (ciao Frank) non ritengo elegante che un'altro utente intervenga a pontificare in modo inadeguato.

    Se vogliamo, non è corretto nemmeno da parte mia rivolgersi direttamente ad un'Utente specifico, ma, in questo caso, avevo avuto una chiaccherata telefonica abbastanza esaustiva su questo argomento. Un intervento in merito lo accetto di buon grado da un Moderatore non certo da un personaggio che nemmeno conosco e, soprattutto, non mi conosce.

    È mia abitudine proporre alternative alla richiesta originale dell'Utente, sempre che siano alternative motivate.
    Sarà poi l'Utente richiedente a valutare se l'alternativa proposta è valida o meno

    In conclusione, dopo i chiarimenti di Paolo (che saluto), rimango sempre più convinto che, per trovare una soluzione alla Sua richiesta sia sufficiente impostare la posizione del cursore dopo "Invio". Questa proposta non sarà coerente con la richiesta iniziale dell'Utente, ma, credo abbia un fondo di coerenza con il risultato richiesto senza l'intervento di VBA.
    Con buona pace di chi la pensa in modo diverso.

    Per quanto concerne la procedura di iscrizione, Ti ringrazio, dell'indicazione che molto benevolmente mi hai fornito, ma preferisco decidere in autonomia gli Interlocutori con i quali confrontarmi; purtroppo la mia esperienza in questo Forum non è stata adeguata alle mie aspettative.
    Ecco perchè, nell'augurare le migliori fortune al Forum, preferisco non proseguire in questa esperienza.

    La vita è fatta di esperienze, alcune positive altre, come in questo caso, negative, ma, tutte, sono importanti.

    Buona serata.

    Giuseppe





  • di lepat (utente non iscritto) data: 24/07/2014 08:17:47

    Capisco che è caldo, ma la tua reazione mi sembra spropositata, nessuno ti ha offeso, magari non sei stato compreso e questo capita a tutti e frequentemente.



  • di lepat (utente non iscritto) data: 24/07/2014 08:23:53

    Lungi da me voler fare il moderatore, ho espresso soltanto la mia opinione senza l'intento di offendere nessuno, se mi sono espresso male mi scuso.



  • di Vecchio Frac data: 24/07/2014 09:18:18

    @giuseppeMN
    Sono stato a lungo il Moderatore di questo Forum che attualmente è privo di questa figura per motivi contingenti. Ogni tanto intervengo ancora in questo ruolo perchè "semel moderator, semper moderator" ^_^
    La mia indicazione sul contattare l'Amministratore, patron Mauro, mediante il modulo contatti, non era una "benevola indicazione", ma la procedura corretta da seguire in questi casi di problemi con le iscrizioni. Sei libero di "decidere in autonomia gli Interlocutori con i quali confrontarti", comunque, senza però pretendere di aspettarti risposte da chi non è in grado di fornirtene.
    Ti ringrazio per gli auguri al Forum.
    Non discuto il resto delle tue considerazioni, che sono personali e non mi riguardano.
    Buon proseguimento anche a te.





  • di giuseppeMN (utente non iscritto) data: 24/07/2014 13:14:24

    Buona giornata, Vecchio Frak;
    ho già provveduto ad inviare al Moderatore Mauro la mia rinuncia all'Iscrizione tramite l'apposito modulo.

    Per quanto concerne:
    Vecchi Frak, scrive:
    _____________________________________________________________________
    ... senza però pretendere di aspettarti risposte da chi non è in grado di fornirtene.
    _____________________________________________________________________

    Anche negli altri Forum, credimi, non ho mai preteso nulla; al massimo ho redatto un File nel quale ho inserito gli Interlocutori che, educatamente, rispondono agli interventi e, quindi, a buon diritto, meritano la mia attenzione.

    Buona sertata.

    Giuseppe


  • "fuoco amico"
    di ninai (utente non iscritto) data: 28/07/2014 13:09:30

    Volendo immischiare dei fatti degli altri (da buon siciliano), per me si tratta di un tipico caso di incomprensione da forum, aggravato per giunta da un mancato riconoscimento e involontario "fuoco amico" ;) ;) ;)







  • di lepat (utente non iscritto) data: 28/07/2014 16:08:41

    oltretutto non ha senso prendersela col forum, visto che gli interlocutori sono al 90% sempre gli stessi