Controllo ID in VBA



  • Controllo ID in VBA
    di Baldo (utente non iscritto) data: 30/04/2014 14:11:02

    Salve a tutti, ho bisogno del vostro aiuto visto che ne saprete sicuramente più di me! :)
    Ho scritto un codice per un software di votazione in VBA per excel, è quasi pronto solo che c'è un dettaglio che non riesco a far quadrare. Tale dettaglio/problema è il seguete:
    tramite inputbox ho fatto in modo che l'utente inserisca un codice ID dato ad inizio serata che gli permetta la votazione in modo che ci sia solo un voto per ogni persona (in modo da evitare imbrogli) solo che quando io provo a fare un controllo IF per controllare che il valore ID sia o no presente dentro una casella di testo (casella in cui mano a mano che l'utente scrive il proprio ID si aggiunge in automatico) non mi funziona.
    In poche parole vorrei capire come strutturare tale comando di controllo.
    Grazie mille in anticipo per le risposte, l'aiuto e la collaborazione! :)
    Di seguito allego ciò che ho fatto così da poter rendere meglio l'idea ^^
     
    ID= inputbox("inserisci il codice ID datoti ad inizio serata")
    if ID= txtcodice.text then
    msgbox(" ID già in uso, votazione non valida")
    else
    ' si procede con la normale votazione'
    



  • di Textomb data: 30/04/2014 16:28:54

    ciao
    l'estratto di codice che hai riportato così com'è non è adatto a gestire la questione da te descritta.
    Ti dico come farei io.
    Con l'inputbox ti esponi a rischi. Per esempio se l'utente quando scrive il proprio codice ID commette un errore e da l'ok ecco che avresti una votazione da un utente che non è più rintracciabile...
    Comunque è una tua scelta.
    Per la questione di avere un solo voto per persona, potresti utilizzare gli oggetti dictionary.
    Ti riporto un piccolo esempio da adattare allo scopo.
     
    Option Explicit
    
    Sub Votazione()
    Dim d, i As Long, UV As Long, ID As String, Preferenza As String
    Set d = CreateObject("Scripting.dictionary")
    
    ' ipotizzo che le preferenze registrate confluiscano nella colonna A del mio foglio di lavoro.
    ' UV è il numero dell'ultima votazione registrata con successo
    UV = WorksheetFunction.CountA(Range("A:A"))
    
        For i = 1 To UV
            ID = Range("a" & i).Value
            Preferenza = Range("b" & i).Value
            d.Add ID, Preferenza 'Popolo l'oggetto Dictionary (ID, e Preferenza)
        Next
    
    ' Da qui si esprime la propria preferenza
    ID = Application.InputBox("Inserisci il tuo codice ID")
    Preferenza = Application.InputBox("Inserisci la tua Preferenza")
    
    If d.exists(ID) Then ' Controllo se l'ID è già stato utilizzato. Se lo è…
        MsgBox "Non fare il furbo!!! La preferenza l'hai già data!!! ", vbCritical
        Exit Sub
    Else
        d.Add ID, Preferenza
    End If
    
    ' Adesso posso svuotare l'oggetto Dictionary nel Range A:A del mio foglio.
    Range("a1").Resize(d.Count, 2).Value = Application.Transpose(Array(d.keys, d.Items))
    
    End Sub



  • di Baldo (utente non iscritto) data: 30/04/2014 16:46:12

    Grazie mille textomb :) credo di aver capito...non ho tutto chiaro ma ho una vaga idea su come possa funzionare :)
    allora ti chiedo un'altra informazione per integrare il codice da te descritto con quello che ho già scritto io...
    Una volta che lui fa il controllo volevo far si che sempre tramite inputbox si dia la preferenza e in base al nome scritto il voto vada nell'apposita casella di testo. Ti allego il codice che ho fatto (sperando sia giusto altrimenti pace, imparerò cose nuove vorrà dire :D). Come integro il tuo suggerimento al mio lavoro? :)
    Grazie ancora! :)
     
    Private Sub CommandButton1_Click()
    Dim preferenza, somma, sommaj As Variant
    For i = 0 To 10
    preferenza = InputBox("inserisci il nome del dj che vuoi votare")
    ID = InputBox("inserisci ID")
    
    If preferenza = "andrea" Or preferenza = "Andrea" Then
    somma = somma + 1
    txtris = Val(somma)
    txtcodice = txtcodice & vbCrLf & Str(ID)
            Else
            If preferenza = "luca" Or preferenza = "Luca" Then
            sommaj = sommaj + 1
            txtris2 = Val(sommaj)
            txtcodice = txtcodice & vbCrLf & Str(ID)
            Else
            If preferenza = "Hunz" Then
            MsgBox ("votazione finita")
            Exit For
            Else
            End If
            End If
        End If
    Next
    End Sub
    



  • di Textomb data: 30/04/2014 17:35:50

    Dunque.
    Se ho capito bene da quello che hai scritto.
    Tu devi gestire una votazione e ci sono sostanzialmente due preferenze possibili. O Luca o Andrea. Giusto?
    Non ho capito però quella terza condizione if che se la preferenza è Hunz esce subito dal ciclo for...
    Poi perchè fai un ciclo for ? Non capisco...
    Ma non sarebbe meglio organizzare una maschera di inserimento per le votazioni con due possibili scelte. Senza alcun inputbox che tra l'altro sono "pericolose"...
    Il Votante preme il suo bel pulsantino. Esce una maschera con due opzioni. Chi vuoi votare?
    Hai solo due scelte. Quindi impossibile sbagliare. Non puoi fare altro. Dopo registri il tuo ID e con il controllo che ti ho fatto prima la votazione andrà a buon fine oppure no.
    Inoltre, sul foglio di calcolo, ad ogni votazione si può aggiornare il numero delle preferenze registrate all'uno o all'altro candidato...
    Spero di essere stato chiaro. E comunque, se ho tempo, domani ti allego un piccolo esempio più esaustivo.



  • di Baldo (utente non iscritto) data: 30/04/2014 17:56:36

    Nella tua ultima risposta hai colto esattamente quello che volevo fare (Ma che ahimè non sono riuscito a quanto pare xD ma con conoscenze scolastiche non potevo spingermi più in la di così :( )
    Cmq le preferenze erano solo due per provare in realtà dovrebbero essere circa 6-7 diverse per 3 serate diverse (in totale dovrebbero essere circa intorno alle 28-30 preferenze totali).
    Comunque si, se riuscissi a farmi un esempio esaustivo di come porteresti avanti tu l'idea sarebbe grandioso :D
    Anche perchè come ti dicevo non ho ampissime conoscenze in merito ( conoscenze solo di livello scolastico e nemmeno tanto buono xD).
    Cmq grazie ancora sei gentilissimo! :) attendo tue notizie allora :D



  • di Textomb data: 02/05/2014 10:34:13

    ciao
    Ti allego un piccolo file "Esempio Votazione" che ricalca la mia idea su quanto da te desritto e su come ti avevo anticiapato.
    Adesso puoi provare a completarlo tu stesso.
    Come vedrai con una maschera di inserimento per le votazioni ed inserendo il codice che ti avevo scritto prima, la gestione delle votazioni univoche diventa molto più semplice.
    Spero ti sia d'aiuto.



  • di Baldo (utente non iscritto) data: 02/05/2014 13:08:51

    Grazie mille dell'aiuto e del file allegato :) Sto dando un occhiata ora e sto cercando di capire come funziona ma immagino che google sarà molto d'aiuto :)
    Sei stato eccezionale! :)