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

Re: Excel - Macro crea nuovo foglio e rinomina

Postdi Danielehi » 14/04/09 17:34

Ok grazie, il problema derivava dal fatto che non si riselezionavas il foglio generale alla fine di ogni ciclo... adesso tutto ok sembra....
credo che avremo ancora da discutere in merito ad una certa variabile che conta le righe come si era detto... per adesso 1000 grazie... Ciao Flash, ciao Antony
: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 Danielehi » 17/04/09 17:07

Rieccomi,
Andando avanti mi sono trovato di fronte ad un ulteriore problema, riporto il codice:
Codice: Seleziona tutto
' Parte di pulizia dei fogli clienti
For h = 15 To Sheets.Count
Sheets(h).Select
ir = 2
For x = 1 To 200

    If Cells(ir, 7) = Empty Then
        Cells(ir, 7).EntireRow.Delete
        ir = ir - 1
    End If
ir = ir + 1
x = x + 1

Next
Next


Il problema me lo da segnalandomi un errore:

Errore di run time 1004
Errore nel metodo Select per la classe Worksheet


E mi evidenzia la riga
Sheets(h).Select
In Debug...
Che dite che succede?
: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 » 17/04/09 23:30

ma perché non usi la macro che ti ho postato in un precedente messaggio?
Dove ti consigliavo di sostituire la tua che cerca le righe vuote per cancellarle?
Se la provi vedrai che non avrai problemi di questo tipo
semmai fatti sentire


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 Flash30005 » 17/04/09 23:34

Comunque... penso che quell'errore sia dovuto al fatto che quando hai lanciato la macro non era attivo il foglio interessato.
Ma ripeto prova quel codice postato, se riesci a capire cosa fa ti renderai conto che è di una semplicità unica e sicuramente funzionante

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 » 20/04/09 09:28

Oops, credo ci sia un disguido, nel senso che sono andato molto avanti con il codice e non posso applicare la parte di pulizia come postata in precedenza...
Cerco di spiegare il software in modo da facilitare la comprensione:
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 funzionante
UR = Worksheets("Generale").Range("G" & Rows.Count).End(xlUp).Row   '<<<< CONTEGGIO RIGHE PIENE
For ir = 3 To UR
    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 FONDAMENTALE
      ActiveSheet.Range("A" & ir, "N" & ir).Value = Worksheets("Generale").Range("A" & ir, "N" & ir).Value
      ActiveSheet.Range("O" & ir).Value = Worksheets("Generale").Range("P" & ir).Value
      Sheets("Generale").Select
   End If
   If Cells(ir, 7) = Cells(ir - 1, 7) Then
      Sheets(Worksheets("Generale").Range("G" & ir).Value).Select
      ActiveSheet.Range("A" & ir, "N" & ir).Value = Worksheets("Generale").Range("A" & ir, "N" & ir).Value
      ActiveSheet.Range("O" & ir).Value = Worksheets("Generale").Range("P" & ir).Value
      Sheets("Generale").Select
   End If
Next

' Parte di pulizia dei fogli clienti
For h = 15 To Sheets.Count
Sheets(h).Select                                          '<<< PROBLEMA QUI
ir = 2
For x = 1 To 200

    If Cells(ir, 7) = Empty Then
        Cells(ir, 7).EntireRow.Delete
        ir = ir - 1
    End If
ir = ir + 1
x = x + 1

Next
Next
        Sheets("COMMITTENTE").Select
        ActiveWindow.SelectedSheets.Visible = False
End Sub

Ecco, adesso ci tengo a precisare che i fogli che devo pulire dalle righe bianche sono fogli che vengono generati in automatico dalla macro e sono variabili, quindi ho necessità di effettuare un conteggio, in modo da arrestare opportunamente il "for". Credo che l'unico modo sia con una "SheetsCount", ma non capisco come sistemarla affinchè funzioni senza darmi errore.
Grazie
: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 » 20/04/09 13:50

questa macro funziona partendo dal foglio 1 (puoi modificare questo numero se i primi fogli non devono essere processati (sei sicuro che a te corrispondano a 15 fogli di base? + fogli clienti?).
Codice: Seleziona tutto
Sub CancellaRighe()
For h = 1 To Sheets.Count
UR2 = Sheets(h).Range("G" & Rows.Count).End(xlUp).Row
    Worksheets(h).Select
    Range("G1").Select
    Range("A1:H263").Sort Key1:=Range("G2"), Order1:=xlAscending, Header:= _
        xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal
URC = Sheets(h).Range("G" & Rows.Count).End(xlUp).Row
Rows(URC + 1 & ":" & UR2).Select
    Selection.ClearContents
    Selection.Delete Shift:=xlUp
Next
End Sub

Ti ricordo comunque che se si sono creati dei "buchi" di numerazione fogli avrai sempre errore.
Se in una cartella di excel tu cancelli un foglio (esempio foglio 10, l'ultimo della cartella) e crei un nuovo foglio excel lo numererà come foglio11 quando vai a processare il foglio 10 il programma darà errore in quanto inesistente. altrimenti dovrai variare la routine e selezionare i fogli con il loro nome
Cambiando queste due righe della precedente macro
Codice: Seleziona tutto
UR2 = Sheets(h).Range("G" & Rows.Count).End(xlUp).Row   '<<< Esistente
NomeF = Worksheets(h).Name                                                    '<<< Aggiunta
    Worksheets(NomeF).Select                                                    '<<< Modificata
    Range("G1").Select                                                                '<<< Esistente


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 » 20/04/09 17:29

ok Flash, risolto... per conoscenza ti faccio sapere che questa è la versione del codice definitiva
Codice: Seleziona tutto
For h = 15 To Sheets.Count
Sheets(h).Select
ir = 2
For x = 1 To 200

    If Cells(ir, 7) = Empty Then
        Cells(ir, 7).EntireRow.Delete
        ir = ir - 1
    End If
ir = ir + 1
x = x + 1

Next
Next

e funziona con una minima complessità computazionale... il problema che mi dava è dovuto alla presenza di 2 fogli nascosti che come ho potuto imparare vengono conteggiati in termini di Sheet.Count, ovvero sono dei fogli a tutti gli effetti che fanno numero.
A presto grazie 1000 :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 » 21/04/09 07:41

Vedo che continui a conteggiare le tue righe in cerca di quella vuota per poi cancellarla (una ad una)
For x = 1 To 200
o
For x = 1 To 1600
invece di usare il codice ordina e cancella come indicato nel codice da me postato.
Vuole dire che preferisci far fare ad excel la routine da 1, 2,3,4,5...1600 (3200 operazioni, 1600 * 2) invece che un ordina e un cancella (solo due operazioni), spero che tu non abbia molti fogli da processare altrimenti passeranno minuti e minuti con la tua routine.
Comunque, ognuno è libero di scegliere ciò che ritiene più opportuno.

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 » 21/04/09 14:05

ok hai ragione...
mi rendo conto, che questa cosa è proprio vera, sistemo subito... Alle prossime :D
Ciao
:D Gingol odd uei, ouaffai ditisturrai :D
Danielehi
Utente Junior
 
Post: 18
Iscritto il: 08/04/09 15:34
Località: Reggio Calabria

Precedente

Torna a Applicazioni Office Windows


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


Chi c’è in linea

Visitano il forum: Nessuno e 12 ospiti