Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

Excel - Macro crea nuovo foglio e rinomina

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

Excel - Macro crea nuovo foglio e rinomina

Postdi Danielehi » 08/04/09 16:47

Ciao ragazzi/e vi sottopongo un problema che mi ha bloccato nella progettazione di un foglio di calcolo...

Brevemente, ho scritto la seguente macro che, tra le altre cose, dovrebbe scorrere la colonna G (colonna dei clienti) del foglio "Generale" e allorquando trova un NOME nuovo rispetto a quelli già visitati deve creare un nuovo foglio che si chiami come il NOME di cui sopra. Questo foglio nuovo magari dovrebbe essere la copia del foglio da me predisposto chiamato COMMITTENTE... Ho pensato di ordinare il foglio Generale in modo da consentire il confronto tra i nomi, e qualora siano diversi si dovrebbe creare sto nuovo foglio, ma aimè non funge...

Codice: Seleziona tutto
Sub UNICA()

Dim I As Long
'
‘ Parte irrilevante
Sheets("Generale").Select
ActiveSheet.Unprotect
ir = 2
For x = 1 To 1600
    If Cells(ir, 1) = Empty Then
        Cells(ir, 1).EntireRow.Delete
        ir = ir - 1
    End If
ir = ir + 1
x = x + 1
Next

‘ Parte di ordinamento funzionante

Rows("2:200").Select
               ActiveWorkbook.Worksheets("Generale").Sort.SortFields.Clear
                ActiveWorkbook.Worksheets("Generale").Sort.SortFields.Add Key:=Range("G3:G214"), _
              SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
             With ActiveWorkbook.Worksheets("Generale").Sort
        .SetRange Range("A2:O214")
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
             End With

‘ Parte non funzionante

ir = 4
For x = 1 To 1600
    If Cells(ir, 7) <> Cells(ir-1,7)
           Sheets.Add
   Sheets("Foglio1").Name = " Worksheets("Generale").Range("ir" & G).Value "
    End If
ir = ir + 1
x = x + 1
Next
:D Gingol odd uei, ouaffai ditisturrai :D
Danielehi
Utente Junior
 
Post: 18
Iscritto il: 08/04/09 15:34
Località: Reggio Calabria

Sponsor
 

Re: Excel - Macro crea nuovo foglio e rinomina

Postdi pietrol » 08/04/09 20:17

Ciao Danielehi
prova a modificare così:
Codice: Seleziona tutto
For x = 1 To 1600
    If Cells(ir, 7) <> Cells(ir - 1, 7) Then
           Sheets.Add
           ActiveSheet.Name = Worksheets("Generale").Range("G" & ir).Value    '<<<RIGA MODIFICATA
    End If
ir = ir + 1
x = x + 1
Next

Una cosa però, in un ciclo For Next l'indice (in questo caso x) si incrementa automaticamente all'istruzione Next, se aggiungi una istruzione
Codice: Seleziona tutto
x = x + 1

ad ogni loop si incrementa di un fattore 2, è questo che volevi fare?
Se è così potresti toglierla e modificare l'istruzione For come segue
Codice: Seleziona tutto
For x = 1 To 1600 Step 2


ciao
pietrol
il lupo ululà, il castello ululì
pietrol
Utente Senior
 
Post: 270
Iscritto il: 07/01/09 14:34

Re: Excel - Macro crea nuovo foglio e rinomina

Postdi Flash30005 » 08/04/09 23:03

A me sembra di capire che Danielehi vorrebbe sì un nuovo foglio ma
1) che sia copia del modello Committente
punto 2) credo che Danielehi voglia "mettersi in sicurezza" mettendo X da 1 a 1600 in effetti le righe potrebbero essere anche meno e allora in questo caso perché non calcolarle?
Inoltre l'osservazione di Pietrol è corretta x = x+1 e next sposta il cursone di 2 righe ad ogni passo quindi non credo sia questo il desiderio di Danielehi
quindi se non ho interpretato male e le intuizioni sono corrette potrebbe andare bene la macro così modificata
Codice: Seleziona tutto
 
UI = Worksheets("Generale").Range("G" & Rows.Count).End(xlUp).Row   '<<<< RIGA AGGIUNTA PER CALCOLO RIGHE PIENE
For x = 1 To UI
    If Cells(ir, 7) <> Cells(ir - 1, 7) Then
       Sheets("COMMITTENTE").Copy After:=Worksheets(Worksheets.Count)    '<<<RIGA MODIFICATA
        ActiveSheet.Name = Worksheets("Generale").Range("G" & ir).Value    '<<<RIGA MODIFICATA
    End If
ir = ir + 1
'x = x + 1     '<<< RIGA COMMENTATA
Next


Fai sapere
Ciao
Flash
Win7 + Office 2010 Ita
"Fotografica" al servizio dell'immagine

Ottime opportunità di lavoro (part-time o full-time) con guadagni immediati. Info in MP
Avatar utente
Flash30005
Moderatore
 
Post: 8460
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Excel - Macro crea nuovo foglio e rinomina

Postdi Anthony47 » 08/04/09 23:18

Credo che serva anche un Sheets("Generale").Select posizionato prima di End if, cioe' (sulla macro di Flash):
Codice: Seleziona tutto
       Sheets("COMMITTENTE").Copy After:=Worksheets(Worksheets.Count)    '<<<RIGA MODIFICATA
        ActiveSheet.Name = Worksheets("Generale").Range("G" & ir).Value    '<<<RIGA MODIFICATA
        Sheets("Generale").Select                       'ULTERIORE AGGIUNTA
    End If


Ciao.
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13904
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Excel - Macro crea nuovo foglio e rinomina

Postdi Danielehi » 09/04/09 07:33

Buongiorno,
sto per andare al lavoro (inizio alle 9 alla faccia della bella vita) vi faccio sapere subitissimo appena la provo...
A dopo :)
:D Gingol odd uei, ouaffai ditisturrai :D
Danielehi
Utente Junior
 
Post: 18
Iscritto il: 08/04/09 15:34
Località: Reggio Calabria

Re: Excel - Macro crea nuovo foglio e rinomina

Postdi Danielehi » 09/04/09 09:12

Provata... Non funge ancora...
Riporto di seguito la nuova versione del codice, testata per intero tranne la riga che riporto in fondo, la quale mi da problemi in fase di Debug ed esecuzione:
Codice: Seleziona tutto
Sub UNICA()

Dim I As Long
'
‘ Parte di pulizia del Generale
Sheets("Generale").Select
ActiveSheet.Unprotect
ir = 2
For x = 1 To 1600
    If Cells(ir, 1) = Empty Then
        Cells(ir, 1).EntireRow.Delete
        ir = ir - 1
    End If
ir = ir + 1
x = x + 1
Next

‘ Parte di ordinamento funzionante

Rows("2:200").Select
               ActiveWorkbook.Worksheets("Generale").Sort.SortFields.Clear
               ActiveWorkbook.Worksheets("Generale").Sort.SortFields.Add Key:=Range("G3:G214"), _
              SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
             With ActiveWorkbook.Worksheets("Generale").Sort
        .SetRange Range("A2:O214")
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
             End With

‘ Parte non funzionante
ir = 4
For x = 1 To 800
    If Cells(ir, 7) <> Cells(ir - 1, 7) Then
       Sheets("COMMITTENTE").Copy After:=Worksheets(Worksheets.Count)    '<<<RIGA MODIFICATA
       ActiveSheet.Name = Worksheets("Generale").Range("G" & ir).Value    '<<<NON FUNGE?!?!?!?
    End If
ir = ir + 1
Next
End Sub
:D Gingol odd uei, ouaffai ditisturrai :D
Danielehi
Utente Junior
 
Post: 18
Iscritto il: 08/04/09 15:34
Località: Reggio Calabria

Re: Excel - Macro crea nuovo foglio e rinomina

Postdi Flash30005 » 09/04/09 09:31

Aggiungi la riga che ha consigliato Anthony per rendere attivo il foglio Generale altrimenti va in errore
Codice: Seleziona tutto
       Sheets("Generale").Select                       'ULTERIORE AGGIUNTA


fai sapere
Flash
Win7 + Office 2010 Ita
"Fotografica" al servizio dell'immagine

Ottime opportunità di lavoro (part-time o full-time) con guadagni immediati. Info in MP
Avatar utente
Flash30005
Moderatore
 
Post: 8460
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Excel - Macro crea nuovo foglio e rinomina

Postdi Flash30005 » 09/04/09 09:42

Riguardando il tutto penso che tu possa fare così (il valore X non è necessario):
Codice: Seleziona tutto
UR = Worksheets("Generale").Range("G" & Rows.Count).End(xlUp).Row   '<<<< CONTEGGIO RIGHE PIENE
For ir = 2 To UR
    If Cells(ir, 7) <> Cells(ir - 1, 7) Then
       Sheets("COMMITTENTE").Copy After:=Worksheets(Worksheets.Count)
        ActiveSheet.Name = Worksheets("Generale").Range("G" & ir).Value   
       Sheets("Generale").Select                     
End If
Next
Flash
Win7 + Office 2010 Ita
"Fotografica" al servizio dell'immagine

Ottime opportunità di lavoro (part-time o full-time) con guadagni immediati. Info in MP
Avatar utente
Flash30005
Moderatore
 
Post: 8460
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Excel - Macro crea nuovo foglio e rinomina

Postdi Danielehi » 09/04/09 14:17

Daccordo , ma FLASH, e voi altri, considerate che l'errore me lo da qua:

ActiveSheet.Name = Worksheets("Generale").Range("G" & ir).Value

Domanda: Siamo sicuri che si possa rinominare un foglio con il nome ce sia il contenuto di una cella?

A presto... :undecided:
:D Gingol odd uei, ouaffai ditisturrai :D
Danielehi
Utente Junior
 
Post: 18
Iscritto il: 08/04/09 15:34
Località: Reggio Calabria

Re: Excel - Macro crea nuovo foglio e rinomina

Postdi Anthony47 » 09/04/09 21:55

Un aiutino ci potrebbe venire dal messaggio di errore e dall' indicazione di quanti fogli la macro ha creato e quindi quale rinominazione del nuovo foglio creato fallisce.
Do' per scontato che hai gia' controllato che non sei arrivato a una cella vuota o che il nuovo nome foglio che vuoi assegnare ma fallisce non contiene caratteri vietati dalle convenzioni excel...
A livello preventivo, per evitare di finire su celle vuote, potresti modificare questa If Cells(ir, 7) <> Cells(ir - 1, 7) Then in questa:
Codice: Seleziona tutto
If Cells(ir, 7) <> Cells(ir - 1, 7) and Cells(ir, 7) <> "" Then

Ciao, fatti sentire.
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13904
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Excel - Macro crea nuovo foglio e rinomina

Postdi Flash30005 » 09/04/09 23:09

Stavo rivedendo anche la tua prima parte di macro e mi sembra di capire che hai delle righe vuote che come dice bene Anthony potrebbero fornire l'errore che riscontri prova a sostituire la tua macro parte funzionante (la prima parte):
Danielehi ha scritto:
Codice: Seleziona tutto
Sub UNICA()

Dim I As Long
'
‘ Parte di pulizia del Generale
Sheets("Generale").Select
ActiveSheet.Unprotect
ir = 2
For x = 1 To 1600
    If Cells(ir, 1) = Empty Then
        Cells(ir, 1).EntireRow.Delete
        ir = ir - 1
    End If
ir = ir + 1
x = x + 1
Next

‘ Parte di ordinamento funzionante

Rows("2:200").Select
               ActiveWorkbook.Worksheets("Generale").Sort.SortFields.Clear
               ActiveWorkbook.Worksheets("Generale").Sort.SortFields.Add Key:=Range("G3:G214"), _
              SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
             With ActiveWorkbook.Worksheets("Generale").Sort
        .SetRange Range("A2:O214")
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
             End With

‘ Parte non funzionante
ir = 4
For x = 1 To 800
    If Cells(ir, 7) <> Cells(ir - 1, 7) Then
       Sheets("COMMITTENTE").Copy After:=Worksheets(Worksheets.Count)    '<<<RIGA MODIFICATA
       ActiveSheet.Name = Worksheets("Generale").Range("G" & ir).Value    '<<<NON FUNGE?!?!?!?
    End If
ir = ir + 1
Next
End Sub

con questa:
Codice: Seleziona tutto
Worksheets("Generale").select
UR = Worksheets("Generale").Range("G" & Rows.Count).End(xlUp).Row
    Range("G1").Select
    Range("A1:H263").Sort Key1:=Range("G2"), Order1:=xlAscending, Header:= _
        xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal
URC = Worksheets("Foglio1").Range("G" & Rows.Count).End(xlUp).Row
Rows(URC + 1 & ":" & UR).Select
    Selection.ClearContents
    Selection.Delete Shift:=xlUp
'------------------------------------
' parte modificata dai post precedenti

For ir = 2 To URC                                           '<<< modificata la variabile
    If Cells(ir, 7) <> Cells(ir - 1, 7) Then
       Sheets("COMMITTENTE").Copy After:=Worksheets(Worksheets.Count)
        ActiveSheet.Name = Worksheets("Generale").Range("G" & ir).Value   
       Sheets("Generale").Select                     
End If
Next


Fai sapere

Ciao
Flash
Win7 + Office 2010 Ita
"Fotografica" al servizio dell'immagine

Ottime opportunità di lavoro (part-time o full-time) con guadagni immediati. Info in MP
Avatar utente
Flash30005
Moderatore
 
Post: 8460
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Excel - Macro crea nuovo foglio e rinomina

Postdi Danielehi » 10/04/09 15:18

Ci sto provando.... abbiate pazienza, please e grazie mille :)
:roll:
:D Gingol odd uei, ouaffai ditisturrai :D
Danielehi
Utente Junior
 
Post: 18
Iscritto il: 08/04/09 15:34
Località: Reggio Calabria

Re: Excel - Macro crea nuovo foglio e rinomina

Postdi Danielehi » 10/04/09 15:27

Danielehi ha scritto:Ci sto provando.... abbiate pazienza, please e grazie mille :)
:roll:

Non credo che sia stato chiaro... vi ripropongo la domanda: Siamo sicuri che si può dare a un foglio il nome prendendolo dal contenuto di una cella? ossia questo comando? ActiveSheet.Name = Worksheets("Generale").Range("G" & ir).Value
:D Gingol odd uei, ouaffai ditisturrai :D
Danielehi
Utente Junior
 
Post: 18
Iscritto il: 08/04/09 15:34
Località: Reggio Calabria

Re: Excel - Macro crea nuovo foglio e rinomina

Postdi Anthony47 » 10/04/09 15:35

SI.
Piuttosto, l' aiutino che ti avevo chiesto?

Ciao.
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13904
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Excel - Macro crea nuovo foglio e rinomina

Postdi Danielehi » 10/04/09 17:33

Anthony47 ha scritto:SI.
Piuttosto, l' aiutino che ti avevo chiesto?

Ciao.

Bene, in effetti mi sono reso conto che rinomina i fogli... ma succede una cosa strana, che mi presto a spiegare al meglio:
La macro procede fino all'ordinamento del foglio generale, dopo di che genera un foglio nuovo e lo rinomina, come è giusto che sia, ma alla iterazione successiva del ciclo if mi da errore di run time 1004... dal debug poi mi evidenzia in giallo la riga { ActiveSheet.Name = Worksheets("Generale").Range("G" & ir).Value }
Quindi rispondendo, si blocca alla seconda iterazione al momento di rinominare il foglio... per completezza riporto l'intera macro di seguito
Codice: Seleziona tutto
Sub UNICA()

Dim I As Long
'
‘ Parte di pulizia del Generale
Sheets("Generale").Select
ActiveSheet.Unprotect
ir = 2
For x = 1 To 1600
    If Cells(ir, 1) = Empty Then
        Cells(ir, 1).EntireRow.Delete
        ir = ir - 1
    End If
ir = ir + 1
x = x + 1
Next

‘ Parte di ordinamento funzionante

Rows("2:200").Select
               ActiveWorkbook.Worksheets("Generale").Sort.SortFields.Clear
               ActiveWorkbook.Worksheets("Generale").Sort.SortFields.Add Key:=Range("G3:G214"), _
              SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
             With ActiveWorkbook.Worksheets("Generale").Sort
        .SetRange Range("A2:O214")
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
             End With

‘ Parte non funzionante
ir = 4
For x = 1 To 800
    If Cells(ir, 7) <> Cells(ir - 1, 7) Then
       Sheets("COMMITTENTE").Copy After:=Worksheets(Worksheets.Count)    '<<<RIGA MODIFICATA
        ActiveSheet.Name = Worksheets("Generale").Range("G" & ir).Value    '<<<RIGA MODIFICATA
    End If
ir = ir + 1
Next
End Sub

Mi rimetto completamente alla vostra sapienza :oops:
:D Gingol odd uei, ouaffai ditisturrai :D
Danielehi
Utente Junior
 
Post: 18
Iscritto il: 08/04/09 15:34
Località: Reggio Calabria

Re: Excel - Macro crea nuovo foglio e rinomina

Postdi Anthony47 » 10/04/09 18:02

Hai ignorato completamente questo "suggerimento": viewtopic.php?f=26&t=79569#p452226
Era gia' stato ribadito da Flash qui: viewtopic.php?f=26&t=79569#p452264.

Ciao.
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13904
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Excel - Macro crea nuovo foglio e rinomina

Postdi Flash30005 » 10/04/09 19:03

Danielehi,

ti ripropongo la macro che dovrai sostituire alla tua (questa non lascia celle o righe in bianco che poi danno errore)
devi sostituire anche la tua parte funzionante (la prima parte)
Codice: Seleziona tutto
'----------- tua parte funzionante da sustituire con questa
Worksheets("Generale").select
UR = Worksheets("Generale").Range("G" & Rows.Count).End(xlUp).Row
    Range("G1").Select
    Range("A1:H263").Sort Key1:=Range("G2"), Order1:=xlAscending, Header:= _
        xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal
URC = Worksheets("Generale").Range("G" & Rows.Count).End(xlUp).Row
Rows(URC + 1 & ":" & UR).Select
    Selection.ClearContents
    Selection.Delete Shift:=xlUp
'----------------------------------- Fine prima parte
' parte seconda che non era funzionante, ora è definitiva

For ir = 2 To URC                                           '<<< modificata la variabile
    If Cells(ir, 7) <> Cells(ir - 1, 7) Then
       Sheets("COMMITTENTE").Copy After:=Worksheets(Worksheets.Count)
        ActiveSheet.Name = Worksheets("Generale").Range("G" & ir).Value   
       Sheets("Generale").Select                     
End If
Next


Fai sapere
Altrimenti invia il file (togliendo nomi e dati personali)

Ciao
Flash
Win7 + Office 2010 Ita
"Fotografica" al servizio dell'immagine

Ottime opportunità di lavoro (part-time o full-time) con guadagni immediati. Info in MP
Avatar utente
Flash30005
Moderatore
 
Post: 8460
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Excel - Macro crea nuovo foglio e rinomina

Postdi Danielehi » 11/04/09 09:33

ok... Ragazzi, ad un primo tentativo sembra non andare, ma voi mi scuserete se mi congedo fino a giorno 14 martedi c.m. poichè mi riposo due giorni.
Vi auguro una buona pasqua, buone feste e vi esprimo la mia gratitudine poichè è bello avere gente che nel mondo del 2009 ti aiuta senza chiedere nulla in cambio, oggi che anche l'aria sembra avere un prezzo.
Tanti auguri ed a martedì, Daniele.
:D Gingol odd uei, ouaffai ditisturrai :D
Danielehi
Utente Junior
 
Post: 18
Iscritto il: 08/04/09 15:34
Località: Reggio Calabria

Re: Excel - Macro crea nuovo foglio e rinomina

Postdi Flash30005 » 11/04/09 09:51

Ciao Danielehi

Non vorrei che tra i tuoi nomi ci fossero caratteri speciali (*,/,$ etc) per verificare prova ad aggiungere questo codice
Codice: Seleziona tutto
 
Msgbox  Worksheets("Generale").Range("G" & ir).Value     '<<<<< CODICE DA AGGIUNGERE (in questa posizione)
ActiveSheet.Name = Worksheets("Generale").Range("G" & ir).Value   '<<< Codice esistente che ti dà errore   

in maniera tale da visualizzare i nomi dei fogli prima che vada in errore

Ciao e Buona Pasqua
Flash
Win7 + Office 2010 Ita
"Fotografica" al servizio dell'immagine

Ottime opportunità di lavoro (part-time o full-time) con guadagni immediati. Info in MP
Avatar utente
Flash30005
Moderatore
 
Post: 8460
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Excel - Macro crea nuovo foglio e rinomina

Postdi Danielehi » 14/04/09 10:37

Sono tornato al lavoro con un pochino di tempo dovrei dare risposte concrete.
:D Gingol odd uei, ouaffai ditisturrai :D
Danielehi
Utente Junior
 
Post: 18
Iscritto il: 08/04/09 15:34
Località: Reggio Calabria

Prossimo

Torna a Applicazioni Office Windows


Topic correlati a "Excel - Macro crea nuovo foglio e rinomina":


Chi c’è in linea

Visitano il forum: Nessuno e 5 ospiti