esercizio con bottoni e checkbox



  • esercizio con bottoni e checkbox
    di piccola (utente non iscritto) data: 09/12/2013 15:12:10

    ciao a tutti! non riesco a svolgere il seguente esercizio su vba di excel 2007 :

    "creare un bottone chiamato < Calcola> e due checkbox e .Il bottone,se premuto,chiede all'utente due valori < x > e < y >: se tali valori sono entrambi numeri,allora li somma o concatena a seconda di quale checkbox è selezionata (se sono selezionate entrambe,o nessuna,chiede all'utente di selezionarne una);se almeno uno dei due valori non è un numero,allora li concatena in un messaggio all'utente senza controllare le checkbox."

    grazie a chi mi aiuterà



  • di patel data: 09/12/2013 16:54:54

    posso capire che non ti riesca qualcosa, ma almeno allega un file con i pulsanti e le checkbox già impostati, non puoi pretendere tutta la pappa scodellata.





  • di Grograman (utente non iscritto) data: 09/12/2013 16:59:48

    Sopratutto se è per un esercizio o almeno offrici un caffè :D



  • di totygno71 data: 09/12/2013 18:34:13

    Da piccola solo un piccolo sforzino ^_^



  • di totygno71 data: 09/12/2013 20:25:24

    Niente da fare...

    Vabbuò jà

    Allego il file....

    Non vorrei mai avere un'insufficienza sulla scoscienza ^_^



  • di Grograman (utente non iscritto) data: 10/12/2013 08:50:46

    Variazione sul tema
     
    Option Explicit
    
    Private Sub CheckBox1_Click()
      If Me.CheckBox2 = True And Me.CheckBox1 = False Then
        Me.CheckBox1 = 0
        Me.CheckBox2 = 1
      Else
        Me.CheckBox2 = 0
        Me.CheckBox1 = Not Me.CheckBox1
      End If
    End Sub
    
    Private Sub CheckBox2_Click()
      If Me.CheckBox1 = True And Me.CheckBox2 = False Then
        Me.CheckBox1 = 1
        Me.CheckBox2 = 0
      Else
        Me.CheckBox1 = 0
        Me.CheckBox2 = Not Me.CheckBox2
      End If
    End Sub
    
    Private Sub CommandButton1_Click()
      Dim x As Double, y As Double
      
      If Not Me.CheckBox1 And Not Me.CheckBox2 Then
        MsgBox "selezionare una opzione"
        Exit Sub
      End If
      
      x = Application.InputBox("Inserire primo Valore", Title:="Primo Numero", Type:=1)
      y = Application.InputBox("Inserire secondo Valore", Title:="Secondo Numero", Type:=1)
      
      If CheckBox1 = True Then
        MsgBox "la somma dei valori è " & x + y
        ElseIf CheckBox2 = True Then
        MsgBox "I valori Numerici sono stati concatenati " & x & y
        Exit Sub
      End If
    End Sub
    



  • di nichicanta (utente non iscritto) data: 10/12/2013 10:31:44

    Ciao Grograman, buongiorno, ho provato il tuo codice abbinadolo ad un pulsante di comando e due CheckBox sul foglio di lavoro, tutto bene solo che non mi visualizza il segno di spunta all'intreno di ogni
    CheckBox quando le seleziono (anche singolarmente).
    Come mai, nel codice di Totygno questo non accade?
    Buona giornata a tutti.



  • di Grograman (utente non iscritto) data: 10/12/2013 11:59:44

    Ecccomemai!
    Ti allego il file che ho usato (il suo).



  • di nichicanta (utente non iscritto) data: 10/12/2013 13:27:50

    Ciao grograman, non so spiegartelo ma a me ( pur agendo sullo stesso file e aggiungendo il tuo codice ad un pulsante e due CheckBox non mi permette le spunta ecc).
    Provalo, il file allegato l'ho chiamato prova.
    Ti saluto.



  • di Grograman (utente non iscritto) data: 10/12/2013 14:51:41

    C'hai raggggione che cacchio ho combinato?

    Se riesco vedo dove ho fatto danni!



  • di nichicanta (utente non iscritto) data: 12/12/2013 09:03:25

    Buongiorno a tutti gli amici (esperti e non), ciao Grograman, solo per curiosità te lo chiedo.
    hai avuto modo di rilevare il problema che ti ho segnalato?
    Saluti.



  • di Grograman (utente non iscritto) data: 12/12/2013 10:21:12

    Ma sai che mi sono incartato?

    Non riesco a venirne fuori e sono certo che mi sto complicando la vita quando la soluzione è l'uovo di colombo



  • di paolomath data: 12/12/2013 11:46:34

    Ciao,

    assegnando il valore di CheckButton1 (2) all'interno dell'evento click richiami ricorsivamente l'evento click stesso ...oops!

    Bye bye



  • di nichicanta (utente non iscritto) data: 12/12/2013 12:00:21

    Ciao paolomath, quindi nel codice di Grograman, cosa va sostituito in base al tuo consiglio, non riesco a capire pur modificando il valore dell'evento Click del CheckButton1 con 0, 1, 2 ecc.
    Il file sul quale ho provato quanto da te indicato si chiama Prova.
    Insegnamelo per favore, devo imparare ( io ci sto provando, ma non capisco ecc.)
    Grazie anticipatamnete e buon lavoro.



  • di Grograman (utente non iscritto) data: 12/12/2013 12:20:25

    Nulla... sono sicuro che c'è un modo più semplice, ma oggi proprio non ingrano!

     
    Option Explicit
    
    
    Private Sub CheckBox1_Change()
    Application.EnableEvents = False
    Dim chk1 As MSForms.CheckBox, chk2 As MSForms.CheckBox
    Set chk1 = Me.CheckBox1
    Set chk2 = Me.CheckBox2
      If chk1 = True And chk2 = False Then
        chk1 = 1
        chk2 = 0
      ElseIf chk1 = True And chk2 = False Then
        chk1 = 1
        chk2 = 0
      ElseIf chk1 = True And chk2 = True Then
        chk1 = 1
        chk2 = 0
      Else
        chk1 = 0
        chk2 = 0
      End If
    Set chk1 = Me.CheckBox1
    Set chk2 = Me.CheckBox2
    Application.EnableEvents = True
    End Sub
    Private Sub CheckBox2_Change()
      Application.EnableEvents = False
      Dim chk1 As MSForms.CheckBox, chk2 As MSForms.CheckBox
      Set chk1 = Me.CheckBox1
      Set chk2 = Me.CheckBox2
        If chk1 = True And chk2 = False Then
          chk1 = 1
          chk2 = 0
        ElseIf chk1 = False And chk2 = True Then
          chk1 = 0
          chk2 = 1
        ElseIf chk1 = True And chk2 = True Then
          chk1 = 0
          chk2 = 1
        Else
          chk1 = 0
          chk2 = 0
        End If
      Set chk1 = Me.CheckBox1
      Set chk2 = Me.CheckBox2
      Application.EnableEvents = True
    End Sub
    
    Private Sub CommandButton1_Click()
      Dim x As Double, y As Double
      
      If Not Me.CheckBox1 And Not Me.CheckBox2 Then
        MsgBox "selezionare una opzione"
        Exit Sub
      End If
      
      x = Application.InputBox("Inserire primo Valore", Title:="Primo Numero", Type:=1)
      y = Application.InputBox("Inserire secondo Valore", Title:="Secondo Numero", Type:=1)
      
      If CheckBox1 = True Then
        MsgBox "la somma dei valori è " & x + y
        ElseIf CheckBox2 = True Then
        MsgBox "I valori Numerici sono stati concatenati " & x & y
        Exit Sub
      End If
    End Sub



  • di paolomath data: 12/12/2013 14:28:28

    Ciao,

    @Nichicanta

    Non è un problema di assegnamento. L'assegnazione CheckButton1 = 1 (o 0) richiama l'evento CheckBox1_Click che richiama se stesso e così via. In pratica abbiamo un funzione ricorsiva. In questo caso la memoria dello stack delle variabili viene piano piano riempita, fino all'overflow. La chiamate viene ripetuta all'infinito se non ci sono controlli per uscire. La chiamata viene eseguita 243 volte prima di dare errore. In Debug si pianta Excel, in esecuzione sembra che non faccia nulla.

    (Specifiche di Excel: Dimensioni dello stack di operandi 1.024)

    Per altri dettagli puoi vedere:

    h t t p://support.microsoft.com/kb/126090/it

    @Grograman

    Anche nella seconda versione è presente una ricorsione. Solo che dopo alcuni cicli se ne esce perché l'evento Change non accade più.

    Controlla se ho detto delle bis.....te

    Bye



  • di nichicanta (utente non iscritto) data: 12/12/2013 15:25:31

    Grazie Paolomath, per la gentile e prezioa informazione e precisazione.
    Mi informo meglio sul link che mi hai indicato.
    Ciao e buon lavoro.



  • di mb (utente non iscritto) data: 12/12/2013 15:29:26

    buon pomeriggio
    ho scaricato e modificato il file ma il risultato ottenuto non è soddisfacente
    come faccio a sommare e far scrivere il risultato in cella A1, perché come l'ho impostata ottengo un concatena
    grazie

     
    If CheckBox1 = True Then
        MsgBox "la somma dei valori è " & CDbl(x) + CDbl(y)
        
    ...... riga aggiunta ............
        Range("A1").Value = x + y
    
    ..............................................
        ElseIf CheckBox2 = True Then
        MsgBox "I valori Numerici sono stati concatenati " & x & y
        Exit Sub
    End If



  • di mb (utente non iscritto) data: 12/12/2013 15:41:37

    salve ho rischiato e ci sono riuscito
    ecco la modifica
    ciao a tutti


     
    If CheckBox1 = True Then
        MsgBox "la somma dei valori è " & CDbl(x) + CDbl(y)
        Range("A1").Value = CDbl(x) + CDbl(y)