Esiste questa funzione



  • Esiste questa funzione?
    di IngElettro (utente non iscritto) data: 02/09/2016 10:33:39

    Salve

    vorrei automatizzare questo processo ma non funziona, é possibile crere qualcosa del genere?

    Secondo, é possibile genereare I Checkbox nell'UserForm direttamente da codice?
    Saluti
     
    Sub ControlloCheckBox()
    For i = 0 To i = 10
    If CheckBox + i.Value = True Then
    out i = i^2
    Else: out i = 0
    End If
    Next i
    End Sub



  • di Vecchio Frac data: 02/09/2016 12:16:46

    Il codice che riporti non è VBA.
    Qual è il "processo" da automatizzare esattamente? Lo descriveresti a parole?
    La risposta al secondo quesito è sì, per esempio con un codice nel form simile a
    Me.Controls.Add "Forms.CommandButton.1", "Test", True





  • Esiste questa funzione?
    di IngElettro (utente non iscritto) data: 02/09/2016 13:29:57

    Ciao, si so che non esiste ma il risultato che cerco é qualcosa del genere , mi spiego brevemente:
    Attualmente ho 96 checkbox, vorrei riuscire ad automatizzare il processo,
    Private Sub CheckBox7_Click()
    If CheckBox7.Value = True Then
    out2 = 2
    Else: out2 = 0
    End If
    End Sub
    vorrei magari con l'ausilio di un ciclo for da i=0 fino a I=95 compilare in automatic la funzione
    tipo if checkbox (numero) i.value=true then
    out (numero) i=i^2
    else: out i=0
    end if

    non so se mi sono spiegato, ma creare un codice che autocompili condando i dove i é la variabile del ciclo for, in modo tale da non dover riscrivere 96 volte lo stesso codice.
    È abbastanza chiaro?
     
    Private Sub CheckBox5_Click()
    If CheckBox5.Value = True Then
    out8 = 128
    Else: out8 = 0
    End If
    End Sub
    
    Private Sub CheckBox6_Click()
    If CheckBox6.Value = True Then
    out1 = 1
    Else: out1 = 0
    End If
    End Sub
    
    Private Sub CheckBox7_Click()
    If CheckBox7.Value = True Then
    out2 = 2
    Else: out2 = 0
    End If
    End Sub
    
    Private Sub CheckBox8_Click()
    If CheckBox8.Value = True Then
    out3 = 4
    Else: out3 = 0
    End If
    End Sub
    
    
    
    
    Private Sub CheckBox38_Click()
    If CheckBox38.Value = True Then
    out14 = 2 ^ 10
    
    
    Else: out14 = 0
    End If
    End Sub
    
    Private Sub CheckBox39_Click()
    If CheckBox39.Value = True Then
    out13 = 2 ^ 10
    Else: out13 = 0
    End If
    End Sub
    
    Private Sub CheckBox40_Click()
    If CheckBox40.Value = True Then
    out15 = 2 ^ 10
    Else: out15 = 0
    End If
    End Sub
    
    Private Sub CheckBox41_Click()
    If CheckBox41.Value = True Then
    out16 = 2 ^ 10
    Else: out16 = 0
    End If
    
    
    End Sub
    
    
    Private Sub CheckBox42_Click()
    If CheckBox42.Value = True Then
    out9 = 2 ^ 9
    Else: out9 = 0
    End If
    End Sub
    
    Private Sub CheckBox43_Click()
    If CheckBox43.Value = True Then
    out10 = 2 ^ 10
    MsgBox (out10)
    
    Else: out10 = 0
    End If
    End Sub
    
    Private Sub CheckBox44_Click()
    If CheckBox44.Value = True Then
    out11 = 2 ^ 11
    Else: out11 = 0
    End If
    End Sub
    
    Private Sub CheckBox45_Click()
    If CheckBox45.Value = True Then
    out12 = 2 ^ 12
    Else: out12 = 0
    End If
    End Sub



  • di Albatros54 data: 02/09/2016 14:20:18

    Questa domanda è gia stata posta

    h t t p://www.excelvba.it/Forum/thread.php?f=2&t=10969




  • Esiste questa funzione?
    di IngElettro (utente non iscritto) data: 02/09/2016 14:25:46

    Ciao,
    si hai ragione ma non ho provato le varie soluzioni offerte ma non funzionano per questo genere di problema,

    serivrebbe qualcosa del genere
    Private chkArray(31) as Checkbox
    Set chkArray(0) = chkFirst
    Set chkArray(1) = chkSecond
    ...
    Set chkArray(31) = chkLast
    Sub MyCountingRoutine
    'count how many checkboxes are selected, and show apt message

    Dim intLoop as Integer
    Dim intCount as Integer
    intCount = 0
    For intLoop = 0 to 31
    If chkArray(intLoop).Value = vbChecked Then 'not sure if this line is correct for VBA!
    intCount = intCount + 1
    End If
    Next intLoop

    LBL_message.Caption = "text" & intCount & "text"
    If intCount Mod 2 = 0 Then
    LBL_message.Caption = LBL_message.Caption & "OK"
    Else
    LBL_message.Caption = LBL_message.Caption & "not right!"
    End If

    End Sub

    ma non funziona


    se vuoi inserisco completamente il programma in modo che si possa far girare e vedere il problema


    attualmente controllo solo una parte dei checkbox ma dovrei aggiungerne altri e non vorrei copiare e modificare il codice 90 e passa volte...

    Sto cercando di creare I check box direttamente da codice e generarli nella userform, dopodiché controllare se sono premuti o meno mediante un array di controllo e un ciclo for.

    mi sono spiegato?
     
    userform code
    
    Sub MyCountingRoutine
    'count how many checkboxes are selected, and show apt message
    
    Dim intLoop as Integer
    Dim intCount as Integer
      intCount = 0
      For intLoop = 0 to 31
        If chkArray(intLoop).Value = vbChecked Then  'not sure if this line is correct for VBA!
          intCount = intCount + 1
        End If
      Next intLoop
    
      LBL_message.Caption = "text" & intCount & "text"
      If intCount Mod 2 = 0 Then
        LBL_message.Caption = LBL_message.Caption & "OK"
      Else 
        LBL_message.Caption = LBL_message.Caption & "not right!"
      End If
    
    End Sub
    
    
    
    



  • di Vecchio Frac data: 02/09/2016 14:43:09

    cit. "non vorrei copiare e modificare il codice 90 e passa volte... "
    ---> Veramente lo scopo degli array di controlli è esattamente questo.

    cit. "non ho provato le varie soluzioni offerte ma non funzionano per questo genere di problema, "
    ---> Non capisco. Non hai provato? e se sì, come e perchè "non funzionano"?

    cit. "Sto cercando di creare I check box direttamente da codice e generarli nella userform, dopodiché controllare se sono premuti o meno mediante un array di controllo e un ciclo for. mi sono spiegato?"
    ---> Tutto chiaro... piuttosto non si sa perchè "non funzionano" le proposte che hai ricevuto. Hai seguito bene i passi necessari?






  • di IngElettro (utente non iscritto) data: 02/09/2016 14:56:22

    Si lo scopo é quello infatti, iterare per non riscrivere chiaro.

    Premessa, faccio fatica ad usare oggetti e classi perché ho sempre usato programmazione basso livello. Detto questo dovrei procedure a passi cosi da poter lavorare bene
    Foglio nuovo.
    Me.Controls.Add "Forms.CheckBox.1", "Test", True
    96 volte per aggiungere 96 Checkbox, Giusto?

    Public chkArray(96) as Checkbox
    questo per gestire gli array

    Set chkArray(0) = chkFirst
    Set chkArray(1) = chkSecond
    ...
    Set chkArray(31) = chkLast
    questo per settare gli array



    Dim intLoop as Integer
    Dim intCount as Integer
    intCount = 0
    For intLoop = 0 to 31
    If chkArray(intLoop).Value = vbChecked Then 'not sure if this line is correct for VBA!
    intCount = intCount + 1
    End If
    Next intLoop

    MsgBox "Selected: " & intCount

    questo per controllare?

    tutto corretto?


    Perché ho creato un foglio nuovo mettendo e controllando tutti I nomi e tipi di variabili ma purtroppo non funziona, già la prima parte non mi genera nella userform I checkbox direttamente lanciando il programma.

    Cerco di esporre al meglio I problem... ma inizierei da questo problema



  • di patel data: 02/09/2016 16:45:55

    secondo me ha sbagliato approccio:
    1) hai iniziato una discussione con un titolo che non dice niente
    2) proponi dei codici senza conoscere il VBA invece di allegare un file con spiegazioni chiare su cosa vuoi ottenere
    3) non rispondi a tono alle domande





  • di IngEle (utente non iscritto) data: 02/09/2016 16:58:46

    Noto invece che la tua risposta è stata costruttiva e di utile aiuto alla risoluzione del problema
    Grazie ora il problema è diverso



  • di patel data: 03/09/2016 07:10:54

    ti sarà utile sicuramente per la prossima volta e forse anche per questa se ti deciderai a seguire le indicazioni.

    Il Risolto non serve a chiudere la discussione ma a indicare a chi la legge che troverà un problema descritto nell'oggetto con la soluzione





  • di Marius44 data: 03/09/2016 08:22:25

    Salve a tutti
    premetto che sono d'accordo con patel (ciao Andrea): un file su cui lavorare è sempre meglio allegarlo per NON costringere chi volesse essere d'aiuto a crearsi tutto lo scenario e per evitare che, una volta creato lo scenario, questo non risponda ai requisiti che il richiedente aveva in mente.

    Vorrei suggerire questo tipo d'approccio (vedi codice parziale sotto) per "girare" su tutti i Controls che si vuole.

    Ciao,
    Mario 
     
    Dim nCB As Integer
    
    For nCB = 1 To 20
        Me.Controls("Combobox" & nCB).AddItem xxx    'è solo un esempio
    Next nCB
    



  • di Vecchio Frac data: 03/09/2016 09:52:53

    @ingElettro
    cit. "96 volte per aggiungere 96 Checkbox, Giusto? "
    ---> Con un bel ciclo, sì, ma non credo che tu debba avere uno sproposito di checkbox sul form, altrimenti in fase di inserimento dati impazzisci (e le etichette?)
    Del resto hai già detto che le devi creare a runtime, quindi creerai solo quelle che ti servono.

    cit. "questo per gestire gli array " e "questo per settare gli array "
    ---> Eh no, non per gli array di controlli che in VBA non esistono come in VB e cheinvece possono essere simulati con la tecnica che ti è già stata illustrata in altra discussione

    cit. "questo per controllare? "
    ---> Non nel senso che intendi tu, ma solo perchè ti manca l'aver capito come funzionano gli array di controlli. Potrebbe avere un senso se intercettando l'evento Click di un combobox imposti un array di interi (o di booleani) al relativo valore, e poi quando devi fare il controllo verifichi i valori dell'array. Oppure usi il suggerimento di Marius per ciclare sui combobox presenti al fine di testarne il valore (non sapendo a priori quanti sono si dovrà ciclare For Each sui controlli del form testando il TypeOf di ogni controllo).

    Il resto è polemica inutile, e il sarcasmo non aiuta mai.





  • di IngElettro (utente non iscritto) data: 03/09/2016 13:10:57

    Ciao a tutti! grazie delle risposte in primis

    Il file non posso allegarlo essendo confidenziale.

    Detto questo lunedì allego un file simile che mostra esattamente l'utilizzo

    @Vecchio Frank
    Purtroppo devo per forza di cosa usare 96 checkbox essendo una configurazione che simula l'utilizzo di 48 input e 48 output, le quali vanno manualmente configurate, una volta letta la configurazione il tutto viene mandato su un file di testo e letto poi da un altro software che si occupata delle comunicazione input output mediante dei componenti hardware dedicati

    Allora noto con piacere la soluzione di @Marius44 e ringrazio anche gli altri per i suggerimenti
    Ora metto assieme un po' tutte le soluzioni e trovo la più congeniale al mio utilizzo

    vi terrò aggiornati e vi faro avere anche il programma per poter dare un occhiata

    saluti e grazie