VBA registra accesso



  • VBA, registra accesso
    di alessia (utente non iscritto) data: 30/11/2013 12:30:06

    Buongiorno. Sono qui nel chiedervi un'altro aiuto. Come sotto riportato il "Codice VBA", mi servirebbe che ad ogni accesso utente, registrasse il nome utente incominciando dalla cella A2 in poi e la password dalla cella B2 in poi su un foglio chiamato "Accessi".
    Questa registrazione di utente e password deve verificarsi ad ogni accesso.
    E' possibile?
    Grazie
     
    Private Sub CommandButton1_Click()
    Dim bln As Boolean
        Dim lRiga As Long
        Dim sh As Worksheet
        
        Select Case Me.TextBox1.Text
            Case Is = "ale1"
                If Me.TextBox2.Text = "ale1" Then
                    bln = True
                End If
            Case Is = "ale2"
                If Me.TextBox2.Text = "ale2" Then
                    bln = True
                End If
            Case Is = "ale3"
                If Me.TextBox2.Text = "ale3" Then
                    bln = True
                End If
            Case Else
                bln = False
        End Select
        
        If bln = True Then
            With sh
            frmGestioneDati.Show
            End With
        End If
    
    End Sub



  • di alessia (utente non iscritto) data: 30/11/2013 12:36:43

    Mi correggo ho commesso un errore. Deve registrare il nome utente partendo dalla cella A2, partendo dalla cella B2 la data di accesso e non la password.



  • di patel data: 30/11/2013 13:21:39

    dovresti spiegare meglio, cosa intendi per accesso utente ? accesso a cosa ?





  • di alessia (utente non iscritto) data: 30/11/2013 13:48:12

    Come visualizzato nel codice, sono inseriti 3 nomi utente. Ciò che avrei bisogno e che ogni volta che un utente ha accesso, deve registrare questo evento nel foglio excel chiamato ACCESSI. In modo tale che io abbia nella cella A2 e B2 il nome utente e la Data attuale. Non so se sono stata chiara.
    Faccio un esempio:
    in questo momento con il mio nome utente ALE1 e password ALE accedo al file, quindi deve riportare ALE1 nella cella A2 e 30/11/2013 nella cella B2 nel foglio chiamato Accessi.
    Questo evento deve avvenire ogni volta che un utente ha accesso, registrando nelle A3,A4 e così via e nelle celle B3,B4, e così via



  • di Vecchio Frac data: 30/11/2013 14:13:42

    Stai realizzando un log per tenere traccia di chi e quando accede al programma.
    Bene, credo che sia un problema alla tua portata.
    Hai descritto bene in parole tue (pseudocodice) i passi da eseguire.
    Apri l'editor del codice del file principale, intercettane l'evento Workbook_Open, in cui aprirai il file Accessi.xls (che sarà naturalmente in un posto fisso e accessibile a tutti), impostandone la proprietà visible a false per non farlo vedere all'utente, quindi aggiornerai il contenuto delle celle di destinazione (scrivendo in fondo all'elenco esistente).
    In alternativa puoi (soluzione anche più semplice) scrivere in un file di testo - invece che in un file Excel - la registrazione degli accessi, con semplici istruzioni Open file For Append As.
    In ogni caso ti invito a provare ad iniziare, condividendo con noi i tuoi progressi (o insuccessi, che ti aiuteremo a risolvere).





  • di alessia (utente non iscritto) data: 30/11/2013 15:00:37

    Ragazzi Vi allego il file in modo tale che possiate vedere meglio e bene di cosa avrei bisogno.
    X Frac... il file Log non è nascosto, fa parte dell'intero progetto. Dai un'occhiata se puoi.
    Per accedere al DataBase la password è: alessia
    Per accedere alla Rubrica; Nome utente: ale1 Password: ale
    Grazie



  • di Vecchio Frac data: 30/11/2013 15:48:30

    Ho visto il tuo progetto, è carino e viene bene.
    Se il log degli accessi è incorporato nel progetto, va bene anche così.
    Io ho capito perfettamente di cosa hai bisogno, però non mi sembra che hai nemmeno provato :)
    Ti ho già dato gli indizi, parti da lì.
    Non serve che rialleghi il file, mostra il codice man mano che lo scrivi se riscontri che non funziona.





  • di alessia (utente non iscritto) data: 30/11/2013 16:05:09

    Frac. Io non ho una conoscenza tale da riuscirci. Se ho chiesto aiuto è perchè non c'è la faccio da sola. Quello che hai visto è frutto di ricerche in rete. E' vero mi sono applicata, ed è venuto fuori ciò che hai potuto ben notare. Se puoi e ti va aiutami.
    Io ci provo.....mah.....



  • di Tostino (utente non iscritto) data: 30/11/2013 16:13:59

    Su su VF aiuta la ns Alessia... ^_^



  • di alessia (utente non iscritto) data: 30/11/2013 16:31:14

    Ho inserito questo codice: ActiveCell.Value = Now()
    mi scrive la Data ed orario in una cella attiva.
    Invece deve scrivere in una posizione ben definita.
     
    Private Sub CommandButton1_Click()
    Dim bln As Boolean
        Dim lRiga As Long
        Dim sh As Worksheet
        
        Select Case Me.TextBox1.Text
            Case Is = "ale1"
                If Me.TextBox2.Text = "ale" Then
                    bln = True
                    ActiveCell.Value = Now()         ' ho inserito questo codice che mi scrive la data ed orario
                                                    ' Unico propblema al momento che lo fa sulla cella attiva.
                    
                End If
            Case Is = "ale2"
                If Me.TextBox2.Text = "ale" Then
                    bln = True
                End If
            Case Is = "ale3"
                If Me.TextBox2.Text = "ale" Then
                    bln = True
                End If
            Case Else
                bln = False
        End Select
        
        If bln = True Then
            With sh
            frmGestioneDati.Show
            End With
        End If
    
    End Sub



  • di patel data: 30/11/2013 18:06:57

    se vuoi scrivere nella cella B5
    range("B5").value = now()





  • di Vecchio Frac data: 30/11/2013 18:10:39

    Hai detto che la registrazione dell'accesso deve avvenire quando l'utente apre il file.
    Invece dal tuo file accade che la registrazione avviene quando l'utente apre la rubrica. Manteniamo questa impostazione che mi sembra più aderente anche a quello che hai detto nell'ultimo post (utilizzi un pulsante).
    Comunque ricorda che all'apertura di ogni file, se le macro sono attivate, VBA cerca nell'oggetto ThisWorkbook una routine chiamata "Workbook_Open" e se la trova esegue il codice in esso contenuto.

    Comunque, che sia in evento apertura, che sia in un pulsante di comando, cosa deve fare il codice?
    cit. "Deve registrare il nome utente partendo dalla cella A2, partendo dalla cella B2 la data di accesso"
    Quindi:
    - cerca l'ultima riga compilata della colonna A del foglio "Accessi"
    - scrivi nella cella (ultima riga compilata + 1, colonna A) il dato "nome utente che ha effettuato l'accesso" (*)
    - scrivi nella cella a fianco (ultima riga compilata + 1, colonna B) il dato "data di adesso"

    (*) se il codice è fatto partire all'evento apertura di Excel, il nome utente va determinato diversamente.

    L'ultima riga compilata del foglio Accessi si ricava con questa istruzione:
    ultima_riga = sheets("accessi").cells([a:a].rows.count, 1).end(xlup).offset(1)
    Qui puoi scrivere il valore "nome utente", e a fianco la data di adesso:
    sheets("accessi").cells(ultima_riga, 1) = textbox1
    sheets("accessi").cells(ultima_riga, 2) = formatdatetime(now, vbshortdate)


    Spero che l'imbeccata sia utile.
    Non arrenderti e prova un po' tu.

    @Tostino
    Pigrone ^_^






  • di alessia (utente non iscritto) data: 30/11/2013 19:48:49

    Frac non ho capito bene come impostare il tuo codice. Io ho provato varie soluzioni ma ninte di che. Unico risultato che ho ottenuto è, salva la data e l'orario nel foglio chiamato Accessi "WW". Quindi un terzo del risultato è stato ottenuto. Ora servirebbe che se partiamo dalla cella B1 a scrivere la data e l'ora, al prossimo accesso deve scrivere in B2, poi in B3 e così via.
    Poi il secondo obiettivo è riportate il nome utente nella cella A1 del foglio "Accessi".
    Quindi ogni volta che si effettua l'accesso alla rubrica, mi scriva ad esempio nella cella A1- ale e nella B2- 30/11/2013 19:45
    Sono disperata!
    Grazie

     
    Private Sub CommandButton1_Click()
    Dim bln As Boolean
        Dim lRiga As Long
        Dim sh As Worksheet
        
        
        
        Select Case Me.TextBox1.Text
            Case "ale1"
                If Me.TextBox2.Text = "ale" Then
                    ThisWorkbook.Worksheets("Accessi").Visible = xlSheetVisible   ' Ho inserito questo codice che mi seleziona il foglio
                    Range("B1").Value = Now()                                      ' + questo di patel
                    bln = True                                                      ' Abbiamo ottenuto un risultato. Sarebbe che
                End If                                                              ' mi inserisce la data e ora nel foglio specificato
            Case Is = "ale2"                                                        ' alla cella B5
                If Me.TextBox2.Text = "ale" Then
                  ThisWorkbook.Worksheets("Accessi").Visible = xlSheetVisible
                   Range("B5").Value = Now()
                    bln = True
                End If
            Case Is = "ale3"
                If Me.TextBox2.Text = "ale" Then
                 ThisWorkbook.Worksheets("Accessi").Visible = xlSheetVisible
                 Range("B5").Value = Now()
                    bln = True
                End If
            Case Else
                bln = False
        End Select
        
        If bln = True Then
            With sh
            frmGestioneDati.Show
            End With
        End If
    
    End Sub



  • di patel data: 30/11/2013 19:57:21

    qualcosa del genere
     
    Private Sub CommandButton1_Click()
    Dim bln As Boolean
        Dim lRiga As Long
        Dim sh As Worksheet
        Set sh = Sheets("Accessi")
        lRiga = sh.Cells(Rows.Count, "A").End(xlUp).Row + 1 'prima riga libera
        Select Case Me.TextBox1.Text
            Case Is = "ale1"
                If Me.TextBox2.Text = "ale" Then
                    bln = True
    
                End If
            Case Is = "ale2"
                If Me.TextBox2.Text = "ale" Then
                    bln = True
                End If
            Case Is = "ale3"
                If Me.TextBox2.Text = "ale" Then
                    bln = True
                End If
            Case Else
                bln = False
        End Select
        
        If bln = True Then
            sh.Cells(lRiga, 2) = Now()
            sh.Cells(lRiga, 1 = Me.TextBox1.Text
            frmGestioneDati.Show
        End If
    
    End Sub
    






  • di alessia (utente non iscritto) data: 30/11/2013 20:03:17

    Patel mi da errore nella terz'ultima riga. Te la riporto qui:
    sh.Cells(lRiga, 1 = Me.TextBox1.Text ' si colora di rosso



  • di alessia (utente non iscritto) data: 30/11/2013 20:10:29

    Ho aggiunto questa riga:
    Range("A1").Value = TextBox1.Text
    Ho ottenuto che nella cella A1 mi scrive il nome utente "ale1"
    Rimane solo il fatto che se trova impegnato le celle A1 e B1 deve passare la scrittura alle celle successive.
     
    Private Sub CommandButton1_Click()
    Dim bln As Boolean
        Dim lRiga As Long
        Dim sh As Worksheet
        
        
        
        Select Case Me.TextBox1.Text
            Case "ale1"
            ThisWorkbook.Worksheets("Accessi").Visible = xlSheetVisible
             Range("A1").Value = TextBox1.Text                                      ' Inserendo questo codice mi riporta anche il nome utente
                If Me.TextBox2.Text = "ale" Then
                    ThisWorkbook.Worksheets("Accessi").Visible = xlSheetVisible   ' Ho inserito questo codice che mi seleziona il foglio
                    Range("B1").Value = Now()                                      ' + questo di patel
                    bln = True                                                      ' Abbiamo ottenuto un risultato. Sarebbe che
                End If                                                              ' mi inserisce la data e ora nel foglio specificato
            Case Is = "ale2"                                                        ' alla cella B5
                If Me.TextBox2.Text = "ale" Then
                  ThisWorkbook.Worksheets("Accessi").Visible = xlSheetVisible
                   Range("B5").Value = Now()
                    bln = True
                End If
            Case Is = "ale3"
                If Me.TextBox2.Text = "ale" Then
                 ThisWorkbook.Worksheets("Accessi").Visible = xlSheetVisible
                 Range("B5").Value = Now()
                    bln = True
                End If
            Case Else
                bln = False
        End Select
        
        If bln = True Then
            With sh
            frmGestioneDati.Show
            End With
        End If
    
    End Sub
    
    Private Sub CommandButton2_Click()
    Unload Me
    End Sub
    
    Private Sub CommandButton3_Click()
    Dim bln As Boolean
        Dim lRiga As Long
        Dim sh As Worksheet
        Set sh = Sheets("Accessi")
        lRiga = sh.Cells(Rows.Count, "A").End(xlUp).Row + 1 'prima riga libera
        Select Case Me.TextBox1.Text
            Case Is = "ale1"
                If Me.TextBox2.Text = "ale" Then
                    bln = True
    
                End If
            Case Is = "ale2"
                If Me.TextBox1.Text = "ale" Then
                    bln = True
                End If
            Case Is = "ale3"
                If Me.TextBox2.Text = "ale" Then
                    bln = True
                End If
            Case Else
                bln = False
        End Select
        
        If bln = True Then
            sh.Cells(lRiga, 1) = Now()
            sh.Cells(lRiga, 2 = Me.TextBox1.Text
            frmGestioneDati.Show
        End If
    
    End Sub



  • di Vecchio Frac data: 30/11/2013 20:16:21

    cit. "sh.Cells(lRiga, 1 = Me.TextBox1.Text ' si colora di rosso "
    ---> Manca una parentesi chiusa.





  • di alessia (utente non iscritto) data: 30/11/2013 20:31:34

    Grazie a Patel per il suo codice, grazie a Frac per la sua parentesi.
    Lo sto testando, sembra che funzioni alla grande.
    Non era così facile come si potesse immaginare...
    Grazie a tutti.
    P.s. Frac, mi potevi anche scrivere dove andava la parentesi. Birbantello!!!
    Scherzi a parte Grazie a tutti per il Vostro sostegno



  • di Vecchio Frac data: 30/11/2013 20:34:55

    cit. "P.s. Frac, mi potevi anche scrivere dove andava la parentesi. Birbantello!!! "
    ---> Eh no, te la devi sudare un po' ^_^
    Comunque è solo provando e riprovando che si risolvono le cose.
    Adesso hai imparato che l'oggetto Cells possiede due argomenti, uno per la riga e uno per la colonna, racchiusi tra parentesi. E non lo dimenticherai più ^_^





  • di alessia (utente non iscritto) data: 30/11/2013 20:50:50

    Sei molto saggio. Apprezzo che mi spingi ad imparare. Però non devi dimenticare che come ho postato prima, non ho una conoscenza tale di excel e VBA , che mi permetta di andare oltre. Tu non immagini neanche da quanto tempo lavoro a questo progetto. Trovando qual'cosa qua e qual'cosa la in rete, ed applicandomi al punto che ho un mal di testa che non ti dico, sono riuscita a fare ciò che hai visto dall'allegato. Ritengo che ognuno di noi ha dei limiti, se poi aggiungiamo anche la mancanza di base, stiamo a posto. Comunque non voglio dilungarmi più del dovuto se non per dirVi ancora Grazie. Un abbraccio a te ed uno a Patel....
    Bye Alessia



  • di Vecchio Frac data: 30/11/2013 21:00:33

    LOL, nessuno nasce imparato.
    E per fortuna ci siamo qui noi ^_^
    (perchè hai tolto la spunta su "Discussione risolta"?)





  • di alessia (utente non iscritto) data: 30/11/2013 21:02:40

    Non lo tolta io. Adesso la rimetto...
    Ciao Frac



  • di alessia (utente non iscritto) data: 30/11/2013 21:27:55

    Ora lascio perchè non c'è la faccio più. Auguro una buona serata a tutti.
    Ciao