18/04/13 6:08
gibra
Perchè non mostri il codice del ciclo, e poi spieghi cosa vuoi aggiungere?
aaa
18/04/13 8:52
gibra
Adesso ho capito perchè non capivo
hai creato correttamente il ciclo For/Next: da 3 a 152
ma all'interno del ciclo ripeti il codice per ogni cella!
Invece non serve, basta fare così:
Dim I As Long
For I = 3 To 152
Range("B" & I).Select 'seleziona cella da leggere
Sheets.Add After:=Sheets(Sheets.Count) 'aggiungi un nuovo foglio
Sheets("Foglio1").Select 'Seleziona Foglio1
Selection.Copy
Sheets(Sheets.Count).Select ' seleziona nuovo foglio
Sheets(Sheets.Count).Name = Range("B" & I).Value ' rinominalo
Next i
Dato che (se ho capito bene...) il Name del nuovo foglio deve essere quello contenuto nella cella letta, il valore ce l'hai già in Range(B & i).Value.
Giusto?
Dire che l'istruzione Selection.Copy non serve a niente (se non ti occorre per fare altro).
Ma a mio avviso vi sono un po' di righe che si possono eliminare semplificando ed ottimizzando il codice, basta anteporre il nome del foglio al Range, quindi non serve spostarsi continuamente tra i fogli, aggiungerei anche un controllo per verificare se la cella B? non sia vuota (si sa mai), inoltre userei Trim() per essere certo che non contenga spazi prima e dopo. Insomma, io farei così:
Dim i As Long
Dim sName As String
For i = 3 To 152
sName = Trim(Foglio1.Range("B" & i).Text)
If sName = vbNullString Then Exit Sub ' controllo che la cella non sia vuota
Sheets.Add After:=Sheets(Sheets.Count) ' aggiungo un nuovo foglio
Sheets(Sheets.Count).Name = sName ' rinomino il foglio aggiunto
Next i
Come ti pare?
Ultima modifica effettuata da gibra 18/04/13 9:13
aaa
18/04/13 9:34
simonride
Ciao
giusto hai capito cosa voglio fare ma...
Mi crea il nuovo foglio, ma non lo nomina.
Dopo Sheets(Sheets.Count).Name = Range("B" & I).Value ' rinominalo
non mi fa niente
Devo scrivere il valore .value nel nome del foglio2 giusto?
aaa
18/04/13 11:33
gibra
Verifica meglio il tuo codice con il mio, perché io l'ho testato e funziona perfettamente.
Usa la seconda versione del codice, che usa il nome del foglio:
sName = Trim(Foglio1.Range("B" & i).Text)
aaa