Se non cè aggiungi foglio




  • di LucaS. (utente non iscritto) data: 24/01/2014 20:47:02

    Ecco qua.
    Per adesso prende come nome da cercare il contenuto della cella A1 nel foglio1, tu lo devi adattare alle tue esigenze visto che non ho idea da dove prendi il codice a barre.
    Se la cella A1 è vuota mostra un messaggio di errore.
    Cerca il foglio specificato e se non lo trova lo aggiunge.
     
    Sub trova_foglio()
    Dim a As Boolean
    If Range("a1") <> "" Then
        nomefoglio = Range("a1")
    Else
        MsgBox "Il nome non è definito.", vbCritical + vbOKOnly, "Errore Nome"
        Exit Sub
    End If
    For i = 1 To Sheets.Count
        If Sheets(i).Name = nomefoglio Then
            Sheets(i).Select
            a = True
            Exit For
        Else
            a = False
        End If
    Next
    If a = False Then
        Sheets.Add After:=Sheets(Sheets.Count)
        ActiveSheet.Name = nomefoglio
    End If
    End Sub
    



  • di Deresimo (utente non iscritto) data: 24/01/2014 21:20:59

    Grazie mille. Funziona Benissimo. Spero di imparare presto questo linguaggio. Mi intrippa...



  • di scossa (utente non iscritto) data: 24/01/2014 22:15:40

    @LucaS.: senza discutere sulla "logica" scelta per risolvere, vorrei fare un paio di osservazioni su cui riflettere.

    - ti premuri di dichiarare la variabile *a*, ma dimentichi di dichiarare le altre (i, nomefoglio);
    - l'Else in quel ciclo For non serve a nulla: se trova il foglio, *a* viene impostata a True e si esce dal ciclo, in caso contrario l'Else imposta a False *a*, ma *a* è già False.

    Ovviamente le mie sono opinioni personali, nate osservando solo il codice, spero non vengano male interpretate.



  • di gaetanopr (utente non iscritto) data: 24/01/2014 23:34:20

    Ciao, oltre a togliere Else puoi sostituire Exit For con Exit Sub, dato che una volta trovato il foglio deve soltanto attivarlo.



  • di gaetanopr (utente non iscritto) data: 24/01/2014 23:40:08

    potresti sintetizzarla in questo modo
     
    Sub trova_foglio()
    Dim nomefoglio As String
    If Range("a1") <> "" Then
        nomefoglio = Range("a1")
    Else
        MsgBox "Il nome non è definito.", vbCritical + vbOKOnly, "Errore Nome"
        Exit Sub
    End If
    For i = 1 To Sheets.Count
        If Sheets(i).Name = nomefoglio Then
            Sheets(i).Select
            Exit Sub
        End If
    Next
        Sheets.Add After:=Sheets(Sheets.Count)
        ActiveSheet.Name = nomefoglio
    End Sub
    



  • di LucaS. (utente non iscritto) data: 25/01/2014 10:01:53

    Si ci avevo pensato anche io più tardi e adesso volevo rimediare ma mi avete anticipato...



  • di deresimo data: 25/01/2014 13:13:44

    Troppo gentili. Mi sa che approfitterò ancora del Vostro sapere.