Oppure

Loading
18/04/13 5:23
simonride

Buongiorno Gibra

Sono riuscito a fare il tutto :)

Volevo rendere il tutto un po' piu' dinamico.

ma non riesco a spiegarmi bene :-|

Grazie :hail:
aaa
18/04/13 6:08
gibra
Perchè non mostri il codice del ciclo, e poi spieghi cosa vuoi aggiungere?
aaa
18/04/13 7:42
simonride


Ciao ecco una parte del codice.
Sub Macro1()

Dim I As Long

For I = 3 To 152
Range("B" & I).Select 'Seleziona cella seguente

Sheets.Add After:=Sheets(Sheets.Count) 'inserisci foglio
Sheets("Foglio1";).Select 'Seleziona Foglio1

Selection.Copy
Sheets(Sheets.Count).Select 'Seleziona nuovo foglio
Sheets(Sheets.Count).Name = "AI" 'Rinominalo


Sheets.Add After:=Sheets(Sheets.Count) 'inserisci foglio
Sheets("Foglio1";).Select 'Seleziona Foglio1

Selection.Copy
Sheets(Sheets.Count).Select 'Seleziona nuovo foglio
Sheets(Sheets.Count).Name = "ALBT" 'Rinominalo


Next I
End Sub

Dato che nel ciclo for devo riscrivere per 152 volte questa parte cambiando xxx ,io chiedevo se si potesse rendere dinamica questa parte.


Sheets.Add After:=Sheets(Sheets.Count) 'inserisci foglio
Sheets("Foglio1";).Select 'Seleziona Foglio1

Selection.Copy
Sheets(Sheets.Count).Select 'Seleziona nuovo foglio
Sheets(Sheets.Count).Name = "xxxx" 'Rinominalo

Grazie





aaa
18/04/13 8:52
gibra
Adesso ho capito perchè non capivo :rotfl:

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? :D

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
18/04/13 11:50
simonride

Grazie tanto;)

Ora va tutto con poche istruzioni. :k:

Come avevo pensato ci voleva un qualcosa "String" che leggesse il valore e lo associasse al .Name

Me lo studio bene in modo da capire bene e migliorare :heehee:

Bisogna sbatterci la testa per imparare.

Grazie :hail:

aaa
18/04/13 12:58
gibra
Postato originariamente da simonride:
Grazie tanto;)
Ora va tutto con poche istruzioni. :k:

Prego :)

Postato originariamente da simonride:
Me lo studio bene in modo da capire bene e migliorare :heehee:
Bisogna sbatterci la testa per imparare.

Questa è la regola.
Chi l'ha dura la vince. :yup:

:k:
aaa