Risolto rinominare un foglio dopo la sua creazione.

ezio68

Utente abituale
Original poster
12 Marzo 2023
732
28
28
58
Siracusa
2021
buongiorno, dato questo codice :
Visual Basic:
Private Sub CommandButton1_Click()

    Dim ur As Long
    Dim i As Long
    Dim n As Long
    
    ur = Cells(Rows.Count, 1).End(xlUp).Row
    
    For i = 3 To ur
        If Cells(i, "x") <> Cells(i + 1, "x") Then
            n = n + 1
            ThisWorkbook.Sheets.Add
        End If
    Next i
    
End Sub

che contiene circa 45000 righe, l'ultima riga (x) contiene una costante. Ad ogni cambiamento della costante quindi si incrementa n che in questo caso = 5 e vengono creati quindi nuovi 5 fogli. Ecco mil problema : sarebbe possibile rinominare il foglio appena creato con il contenuto della prima cella (x) e poi il secondo foglio creato con il nuovo contenuto della cella (x) ?
 

ipolito

Excel Expert
Expert
14 Maggio 2023
4.073
1.583
145
52
Lago di Garda sponda bresciana
365
Ciao,

Sono da cellulare non ho possibilità di provare il suggerimento che ti do è a memoria so già di commettere errori di sintassi. Ma sapendo che non sei di primo pelo e che prendi ogni suggerimento come patata germogliata e nei fai buoni frutti mi ci metto.
Personalmente prima del ciclo crerei già il primo foglio e nominerei già

ThisWorkbook.Sheets.name = cella(3,"x").value

Poi dentro il ciclo alla if dopo.add

ThisWorkbook.Sheets.name = cella(I+1,"x").value

Un paio di consigli extra:
Personalmente uso sempre After sheets.count
E occhio al testo della cella perché i nomi dei fogli hanno delle esigenze particolari e non accettano tutti i caratteri presenti e non ricordo a memoria la lunghezza massima. Come sempre ti auguro di farne tesoro 👋
 

Sgrubak

Excel/VBA Expert
Expert
10 Marzo 2022
5.562
2.069
245
365 Beta x32
sarebbe possibile rinominare il foglio appena creato con il contenuto della prima cella (x) e poi il secondo foglio creato con il nuovo contenuto della cella (x) ?
Si. Tieni conto che la funzione Sheets.Add restituisce il riferimento al foglio appena creato. Puoi sfruttarlo in questo modo:

Visual Basic:
Private Sub CommandButton1_Click()

    Dim ur As Long
    Dim i As Long
    Dim n As Long
    Dim sh As Worksheet
    
    ur = Cells(Rows.Count, 1).End(xlUp).Row
    
    For i = 3 To ur
        If Cells(i, "x") <> Cells(i + 1, "x") Then
            n = n + 1
            Set sh = ThisWorkbook.Sheets.Add
            sh.Name = Cells(i, "x").Value
        End If
    Next i
    
End Sub
Attenzione ad esplicitare il .Value sempre. E soprattutto, potresti avere rogne se non anteponi il riferimento all'oggetto Workbook/Worksheet corretto e poi usi ThisWorkbook.

Rischi di leggere da un file e scrivere su un altro.
 
  • Like
Reactions: TheTruster

TheTruster

Utente abituale
Expert
19 Gennaio 2021
967
454
95
thetruster.altervista.org
LTSC 2024
Ciao,
Personalmente preferisco sempre usare una variabile oggetto, perchè mi da più controllo su quale foglio io stia modificando:

Visual Basic:
Dim NewSheet As Worksheet
Set NewSheet = ThisWorkbook.Sheets.Add
NewSheet.Name = "Nome del foglio"

Edit: ops! Sovrapposto con Carmine ( cappello_saluta )

TheTruster
 
  • Like
Reactions: Sgrubak

ezio68

Utente abituale
Original poster
12 Marzo 2023
732
28
28
58
Siracusa
2021
buongiorno, e grazie per le vostre risposte e riscontri. Sgrubak @Sgrubak grazie !
Visual Basic:
Private Sub CommandButton1_Click()

    Dim ur As Long
    Dim i As Long
    Dim n As Long
    Dim ws As Worksheet
    
    ur = Cells(Rows.Count, 1).End(xlUp).Row
    
    For i = 3 To ur
        If Cells(i, "x") <> Cells(i + 1, "x") Then
            n = n + 1
            Set ws = ThisWorkbook.Sheets.Add
            ws.Name = Cells(i, "x")
        End If
    Next i
    
    
    
End Sub

in partenza scrivevo così :
Visual Basic:
Private Sub CommandButton1_Click()

    Dim ur As Long
    Dim i As Long
    Dim n As Long
    Dim ws As Worksheet
    
    ur = Cells(Rows.Count, 1).End(xlUp).Row
    
    For i = 3 To ur
        If Cells(i, "x") <> Cells(i + 1, "x") Then
            n = n + 1
            
            ThisWorkbook.Sheets.Add
            
             ' [I]Carmine code[/I]
            'Set ws = ThisWorkbook.Sheets.Add
            'ws.Name = Cells(i, "x")

        End If
    Next i
    
    
    
End Sub

aggiungeva i fogli e non avevo minimamente pensato a creare un foglio all'interni della if.
grazie 1000 !
 

TheTruster

Utente abituale
Expert
19 Gennaio 2021
967
454
95
thetruster.altervista.org
LTSC 2024
non avevo minimamente pensato a creare un foglio all'interni della if
Tornando al discorso dello studio sull'altra discussione, come ti ha già fatto notare Carmine, lo studio preventivo serve proprio a questo.
Se capisci prima che Wordsheet è un oggetto e che, bene o male, gli oggetti hanno un po' le stesse caratteristiche, almeno in Excel, ti sarebbe risultato più facile arrivare alla soluzione da solo 😉

TheTruster
 
  • Like
Reactions: Sgrubak and ezio68