Problema con i pulsanti



  • Problema con i pulsanti
    di Attilio data: 31/03/2013 12:52:46

    Ciao Buongiorno, ho un problema con i pulsanti, cioè quando faccio una correzione su di una qualsiasi cella del foglio1 e magari dimentico di selezionare la cella dove i pulsanti dovrebbero cominciare a scrive il numero cliccato, esso mi scrive nella cella corretta poco prima, quindi immagina, devo riscrivere la formula da capo, come posso ovviare a questa cosa?............i pulsanti al click devono sempre scrivere nella colonna A:A, grazie, il mio codice è questo:
     
    Sub numero_1()
    
    Application.ScreenUpdating = False
    volte = ActiveCell.Row
    
    
    ActiveCell = "1"
    Cells(volte + 1, 1).Select
    
    Range("o5") = volte
    
    Application.ScreenUpdating = True
    
    End Sub
    
    questa l'ho copiata da qualche parte e non ricordo dove



  • di Vecchio Frac data: 31/03/2013 15:29:15

    Abbi pazienza, ma non è chiaro
    - cosa fai
    - cosa vuoi
    - che problema hai

    Di che pulsanti parli?
    E' chiaro dal codice che "1" viene scritto nella cella attiva; se ti sposti, la cella attiva diventa dove ti sei messo.
    Forse devi lasciar perdere ActiveCell e scrivere solo
    Cells(volte + 1, 1) = "1"

    Va bene copiare un codice, ma poi bisogna (capirlo e) adattarlo alle proprie necessità :)







  • di Attilio (utente non iscritto) data: 31/03/2013 22:27:59

    Hai ragione scusami, allora i pulsanti sono numerici, ogni pulsante deve scrivere nella colonna A:A il proprio valore, i quali devono essere scritti man mano che vengono premuti nella colonna A, ho provato la tua modifica ma non va, puoi scrivermi interamente la cosa con le varie spiegazioni di passaggio?......grazie



  • di Vecchio Frac data: 01/04/2013 09:48:06

    Una soluzione molto semplice, è la seguente.
    Ovviamente vanno create dieci sub, ognuna per il pulsante e vanno cambiati sia i nomi delle sub che l'attribuzione in cella del valore richiesto.
    Non molto performante o elegante, ma semplice e immediato.
     
    option explicit
    
    sub numero_1()
    'questa sub gestisce il valore associato al pulsante numero 1
    dim u as long
        'calcolo l'ultima riga valorizzata della colonna A
        u = cells(cells.rows.count, "A").end(xlup).row
        'scrivo nella cella successiva, in riga u+1 della colonna A, il valore 1
        cells(u+1, "A") = 1
    end sub






  • di Vecchio Frac data: 01/04/2013 09:55:12

    Come li hai creati i pulsanti?
    Una soluzione che permette di scrivere una Function parametrica invece di dieci sub, è quella di trasformare i pulsanti in semplici celle numerate, intercettare il selection_change su una di queste celle, leggere il valore sottostante (da zero a nove), quindi con una semplice cascata di select case scrivere il valore giusto nella colonna A, dopo l'ultimo scritto.
    Più semplice, più elegante, con molto meno codice ripetitivo da scrivere e quindi più gestibile e leggibile.





  • di Attilio data: 02/04/2013 00:44:00

    Si potrebbe avere un esempio?...........da quello che ho capito, invece di creare pulsanti, basterebbe numerare delle celle che con appropriata function diventano come pulsanti?......correggimi se ho capito male



  • di Vecchio Frac data: 02/04/2013 13:41:27

    Allego un piccolo esempio e riporto anche il codice del foglio1, sul quale ho creato una pulsantiera con i numeri da 1 a 9 più zero, clean ed erase table per ricominciare daccapo.
    Quando premi un numero sulla pulsantiera, quel numero viene accodato agli altri presenti in colonna A.
     
    Option Explicit
    
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Const s = "<-- sto per scrivere qui"
    Dim u As Long
    
        If Application.Intersect(Target, [pulsantiera]) Is Nothing Then Exit Sub
        If Target.Cells.Count > 3 Then Exit Sub
        
        Application.EnableEvents = False
    
        If Target.Cells(1) = "Clean" Then
            [pulsantiera].Interior.ColorIndex = -4142   'trasparente
            [H1].Select
            Application.EnableEvents = True
            Exit Sub
        End If
        
        If Target.Cells(1) = "Erase table" Then
            [pulsantiera].Interior.ColorIndex = -4142   'trasparente
            [A:B].ClearContents
            [B1] = s
            [H1].Select
            Application.EnableEvents = True
            Exit Sub
        End If
        
        [pulsantiera].Interior.ColorIndex = -4142   'trasparente
        Target.Interior.ColorIndex = 6  'giallino
        
        'calcolo l'ultima riga valorizzata della colonna A
        u = Cells(Cells.Rows.Count, "A").End(xlUp).Row
        'se non c'è niente in colonna A, prevedo un tappo
        If [COUNTA(A:A)] = 0 Then u = 0
        'scrivo nella cella successiva, in riga u+1 della colonna A, il valore del "pulsante" premuto
        Cells(u + 1, "A") = Target.Cells(1)
        'scrivo nella cella sottostante la frase "Sto per scrivere qui"
        'verificando di non aver raggiunto la fine di Excel
        If u < Cells.Rows.Count - 2 Then
            Cells(u + 1, "B") = ""
            Cells(u + 2, "B") = s
        End If
    
        [H1].Select
        Application.EnableEvents = True
    End Sub
    






  • di Attilio data: 02/04/2013 19:08:39

    Ho provato, ma non ho ancora capito la cosa, lasciamo perdere per ora, gli darò uno sguardo approfondito più in la, ma nella prima soluzione, quella dei pulsanti, mi mancano ancora 2 eventi, il primo è sempre tramite un pulsante eseguire la cancellazione dell'ultimo numero scritto in caso di errore e l'altro evento con altro pulsante, cancellare il primo numero scritto e fare il copia ed incolla dei numeri restanti iniziando dalla colonna A1



  • di Vecchio Frac data: 02/04/2013 20:36:35

    cit. " Ho provato, ma non ho ancora capito la cosa "
    ---> Cos'è che non hai capito? il codice si legge bene, è pure commentato :)
    Sul foglio1 compare una pulsantiera, premendo uno dei numeri, questo viene accodato agli altri presenti nella colonna A.
    Coma da prima richiesta :)
    Sulle nuove richieste, il codice va modificato un pochino, ma ce la puoi fare.
    Tieni solo presente che il nome "pulsantiera" è la base dell'intera routine e riguarda il range di tre cellone per tre che contengono i numeri da zero a nove più i due pulsanti Clean e Erase table. I quali sono solo un esempio di quello che puoi fare cioè quasi tutto ;)





  • di Attilio (utente non iscritto) data: 02/04/2013 20:38:58

    Ha ecco, allora è la pulsantiera che non mi compare?



  • di Vecchio Frac data: 02/04/2013 21:22:59

    Scusa Attilio ma tu cosa vedi nel foglio1? :)





  • di Attilio data: 02/04/2013 21:49:25

    Allora io ho creato una pulsantiera, il codice che tu mi hai scritto all'inizio va benissimo, adesso mi mancano i comandi per il pulsante chiamato cancella primo, e la sua funzione dovrebbe cancella re il numero che è all'inizio della colonna A (A1) e fare il copia dei numeri successivi ed incollarli nella colonna A dalla cella A1, e poi ci sarebbe il pulsante chiamato cancella ultimo che dovrebbe solo cancellare l'ultimo numero inserito



  • di Attilio (utente non iscritto) data: 02/04/2013 23:39:11

    nel foglio 1 non vedo un tubo.....iihihihhihi, come cerca di scrivere in qualsiasi cella mi da errore



  • di Vecchio Frac data: 03/04/2013 08:23:40

    Ma come non vedi niente? Allego un'immagine del foglio1 tratta direttamente dal file.





  • di Attilio data: 03/04/2013 11:14:16

    Nel tuo foglio si vede tutto, avrò sbagliato il copia ed incolla!!!!.........cmq adesso mi sforzerò di fare da solo cancella primo e cancella ultimo, speriamo che riesco, ti faccio sapere, intanto chiudo questo post, grazie ancora amico



  • di Vecchio Frac data: 03/04/2013 14:09:44

    cit. "adesso mi mancano i comandi per il pulsante chiamato cancella primo, e la sua funzione dovrebbe cancellare il numero che è all'inizio della colonna A (A1) e fare il copia dei numeri successivi ed incollarli nella colonna A dalla cella A1"
    ---> Quindi ti basta fare un Delete della cella A1 con Shift verso l'alto dei restanti

    cit. "e poi ci sarebbe il pulsante chiamato cancella ultimo che dovrebbe solo cancellare l'ultimo numero inserito"
    ---> la variabile "u" contiene già l'ultima cella valorizzata, ti basta cancellarla semplicemente con
    Cells(u, 1) = ""

    Prima di provare, ti consiglio di disabilitare
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    facendola diventare ad esempio
    Private Sub xWorksheet_SelectionChange(ByVal Target As Range)
    altrimenti ogni cambiamento che fai viene eseguito e rischia di confonderti :)





  • di Attilio (utente non iscritto) data: 03/04/2013 17:13:30

    Grazie ancora