Controllo nome già esistente



  • Controllo nome già esistente
    di Luca88w data: 23/02/2015 11:23:53

    Ciao a tutti,
    sono un nuovo iscritto, mi piace "giocare" con excel e ultimamente anche con VBA.
    Ho creato un piccolo gestionale che utilizzo al lavoro per dei prodotti che realizziamo.
    Praticamente: vado ad inserire tramite un Userform i dati del mio nuovo particolare, e la macro li scrive nell'ultima riga del mio elenco (la prima vuota).
    Poi vorrei assegnare ad alcune celle di quella riga il nome, perché poi mi servirà richiamarlo in altri fogli.
    Andando al sodo il problema è che non riesco a scrivere una macro che vada a controllare
    se un nome è già stato creato.

    Allego un pezzo della sub.
    iRR è la mia prima riga vuota (dove si inseriscono i dati)
    Nome è il valore della prima cella, che voglio andare a verificare se è già esistente.

    Spero di essere stato chiaro.
    Grazie in anticipo.
    Luca88w
     
    ' posso a questo punto inserire i dati
    Worksheets("Prova").Cells(iRR, 1).Value = Nome.Text ' Colonna 1 (A)
    Worksheets("Prova").Cells(iRR, 2).Value = tipo.Text ' Colonna 2 (B)
    Worksheets("Prova").Cells(iRR, 4).Value = Disegno.Text ' Colonna 4 (D)
    Worksheets("Prova").Cells(iRR, 15).Value = materiale.Text ' Colonna 15 (O)
    
    
    ' imposta variabile NOME come la prima casella
    Nome = Worksheets("Prova").Cells(iRR, 1).Value
    



  • di Textomb data: 23/02/2015 11:44:13

    una possibile soluzione è la seguente.
    Basta ciclare tutti i nomi del foglio e nel caso di un nome già esistente visualzzare un msg.
    Fai attenzione che è case sensitive

     
    Dim N as Name
    
    For Each N In Application.Names
        If N.Name = Nome Then MsgBox "Nome esistente!!": Exit Sub
    Next


  • Calcoli per Statistiche calcio
    di Better75 (utente non iscritto) data: 23/02/2015 12:23:48

    ciao ragazzi.
    ho creato un file excel con 20 fogli, uno per ogni squadra di calcio.
    ogni foglio mi conta i risultati 1 X 2 degli ultimi match e mi fa la somma, ad esempio 15 "1", 15 " X " , 8 " 2 " ( esempio di una squadra, inter, di qualche anno fa ).
    Quello che mi serve è dirgli : conta dalla fine solo le ultime N partite, dove N posso variarlo io, per fare dei test.
    Ho scritto qui sotto il codice che ho trovato in un' altra discussione.
    La mia domanda è : dove inserisco eventualmente il codice VBA?
    dentro una cella?
    E dove posso imparare a programmare VBA?
    grazie a tutti
     
    Private Sub CommandButton1_Click()
    Set wscal = Sheets("CALENDARIO SERIE A")        'assegno ad una variabile il foglio con il calendario
    k1 = Range("a" & Rows.Count).End(xlUp).Row      'l'ultima riga utilizzata sul foglio con l'elenco delle squadre
    Range("b5:g" & k1 & "").ClearContents           'cancello il contenuto della tabella con l'elenco delle squadre
    For i = 5 To k1 Step 2          'il controllo viene fatto dalla riga 5 (prima squadra) alla riga k1 (ultima squadra)
                                    'saltando una riga (ci sono le righe vuote)
        If Cells(i, 1) <> "" Then   'se la cella non è vuota
            contcas = 0             'iniziazializzo a 0 le variabili con i risultati
            vcas = 0
            ncas = 0
            pcas = 0
            conttras = 0
            vtras = 0
            ntras = 0
            ptras = 0
            n = wscal.Range("a" & Rows.Count).End(xlUp).Row     'l'ultima riga utilizzata sul foglio con il calendario
            For k = n To 6 Step -1         'controllo dall'ultima riga in su
                If contcas < 25 Then        'controllo se il contatore delle partite in casa è <25
                    If Cells(i, 1) = wscal.Cells(k, 2) Then     'se la cella analizzata è = alla squadra
                        vcas = vcas + Val(wscal.Cells(k, 6))    'aggiungo i valori alle variabili
                        ncas = ncas + Val(wscal.Cells(k, 7))
                        pcas = pcas + Val(wscal.Cells(k, 8))
                        contcas = contcas + 1                   'incremento il contatore
                    End If
                End If
                If conttras < 25 Then       'controllo se il contatore delle partite in trasferta è <25
                    If Cells(i, 1) = wscal.Cells(k, 3) Then
                        vtras = vtras + Val(wscal.Cells(k, 9))
                        ntras = ntras + Val(wscal.Cells(k, 10))
                        ptras = ptras + Val(wscal.Cells(k, 11))
                        conttras = conttras + 1
                    End If
                End If
            Next
            Cells(i, 2) = vcas      'scrivo i risultati
            Cells(i, 3) = ncas
            Cells(i, 4) = pcas
            Cells(i, 5) = vtras
            Cells(i, 6) = ntras
            Cells(i, 7) = ptras
        End If
    Next
    End Sub
    



  • di Luca88w data: 23/02/2015 13:11:30

    Grazie Textomb!
    perfetto
    Ho implementato la macro andando a ripulire le celle nel caso il nome sia già esistente.

    Ciao
    Luca88w
     
    ' controllo se il nome esiste già, nel caso cancella il contenuto delle celle
    Dim N As Name
    For Each N In Application.Names
        If N.Name = Nome Then MsgBox "NOME ESISTENTE!!", Range(Cells(iRR, 1), Cells(iRR, 21)).ClearContents: Exit Sub
    Next