Condividi:        

macro cicla fogli da lista

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

macro cicla fogli da lista

Postdi ikwae » 20/04/23 00:20

Ciao a tutti … ho un programma che genera dai 30 a 500 fogli (in funzione dei dati)e, per
comodità di chiarezza, scrivo 200.
Quindi quando il programma ha finito di generare i 200 fogli interviene una macro cicla-fogli-Dati che
elabora tutti i fogli tranne quelli scritti nel codice (Qui, Quo, Qua).E fin qui tutto nella normalità.

Autonomamente il programma si riavvia ancora e genera altri 200 fogli
così facendo all’interno del file ci sono 400 fogli e qui che mi sono bloccato.
Purtroppo si deve interrompere il ciclo per estrarre 200 fogli.

Vorrei non interrompere il ciclo e fare un unico ciclo con una macro “cicla-fogli-selettore”.
Mi spiego meglio se io scrivo sulla colonna A i nomi dei fogli che devo elaborare e sulla colonna B i nomi
dei fogli che apparentemente sono stati elaborati quindi non dovrebbero essere ciclati.

E qui nasce un’ulteriore rompicapo perché mi sono accorto che tutti i 400 fogli devono essere “rivisti”
o per un errore o solamente per essere aggiornati o qualunque altra motivazione possibile.

In questo punto mando in esecuzione la macro di manutenzione cicla-fogli-Geppo che,
non interpella le colonne A e B, cicla tutti i 400 fogli scrivendo le correzioni mettendoli tutti a posto.

Quindi mi rivolgo a tutti coloro che mi possono aiutare ad avere, se possibile, una
macro “selettore” che da codice si può selezionare:
1a) “selettore A” che cicla tutti i fogli della sola colonna A mandando in
esecuzione, per ogni foglio, una o più macro

2b) “selettore B” che cicla tutti i fogli della sola colonna B mandando in
esecuzione, per ogni foglio, una o più macro

3c) “selettore neutro” che cicla tutti i fogli tranne (Qui, Quo, Qua) mandando
in esecuzione, per ogni foglio, una o più macro.
In allegato un file con dentro 10 fogli vuoti solo come indicazione e prove per la macro:
_fogli: Qui, Quo, Qua sono del programma e, di conseguenza, non partecipano in nessuna azione
_foglio: Lista dove c’è scritto in colonna A i nomi dei fogli e in B i nomi di altri fogli
_figli: i rimanenti sono quelli riportati nelle colonne A e B

Ringraziando anticipatamente tutti coloro che mi possono aiutare 73 ikwae
https://we.tl/t-mNHiTaubyt
Excel 2007
Avatar utente
ikwae
Utente Senior
 
Post: 309
Iscritto il: 27/12/17 23:14

Sponsor
 

Re: macro cicla fogli da lista

Postdi Anthony47 » 21/04/23 09:10

Quindi stai cercando un sistema che ti faciliti il lancio delle macro...

Se è così allora proviamo con l'evento DoppioClick:
-su foglio Lista, metti una descrizione in A1:C1 tipo Lista A - Lista B - Lista C (non e' fondamentale)
-tasto dx sul tab col nome foglio "Lista"; scegli Visualizza codice;
-nella pagina vba che si apre, incolla questo codice:
Codice: Seleziona tutto
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim shList, sSh, Ignora, wS As Worksheet, I As Long
'
Cancel = True
If Target.Address = "$A$1" Then
    shList = Range(Target.Offset(1, 0), Target.Offset(10000, 0).End(xlUp)).Value
    For Each sSh In shList
        Sheets(sSh).Select
        Call Macro1
        Call Macro3
    Next sSh
ElseIf Target.Address = "$B$1" Then
    shList = Range(Target.Offset(1, 0), Target.Offset(10000, 0).End(xlUp)).Value
    For Each sSh In shList
        Sheets(sSh).Select
        Call Macro2
        Call Macro3
        Call Macro4
    Next sSh
ElseIf Target.Address = "$C$1" Then
    Ignora = Array("Qui", "Quo", "Qua", "Lista")                 '  <<< E' giusto l'elenco?
    For I = 1 To ThisWorkbook.Sheets.Count
        Sheets(I).Select
        If IsError(Application.Match(ActiveSheet.Name, Ignora, False)) Then
            Call Macro1
            Call Macro2
            Call Macro5
        End If
    Next I
End If
End Sub

Ci sono 3 blocchi molto simili; in ognuno devi personalizzare l'elenco delle macro che devono essere eseguite quando si fa doppioclick su A1, B1 o C1; i fogli sono quelli dei rispettivi elenchi (A1 o B1), oppure "tutti meno quelli dichiarati nella riga marcata <<<"

Dando per scontato che le tue macro sono scritte per funzionare sul foglio attivo, facendo DoppioClick su A1, B1 o C1 di Lista le macro inserite nel codice saranno eseguite in sequenza sui fogli definiti.

Se intendevi un'altra cosa allora spiega nuovamente...
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: macro cicla fogli da lista

Postdi ikwae » 21/04/23 15:16

Gentilissimo Anthony sempre molto gentile a rispondermi….
Dopo un mese che scarico dalla rete qualsiasi cosa riguardante i fogli sono
riuscito finalmente ad avere quello che cerco.
Ho copiato parti del tuo codice, della tua macro “Olimpica”, che mi mancavano
e altri spunti per averne una un po' più al mio livello (che è molto basso).
Dico questo perché come ho scritto sul post di richiesta di aiuto la macro dovrebbe
funzionare senza interrompere il ciclo. Sicuramente colpa mia che non sono stato
capace a scrivere o evidenziare, in modo univoco, esattamente quello che cerco.

Comunque è tutto a posto :D perché la tua macro è ugualmente
molto preziosa, così com’è, la userò per le elaborazioni dei quasi 8.000 (ottomila)
fogli, in continuo aumento, finiti e completi sono soltanto la estrapolare i “frutti”.

Per completezza del post, allego la macro, frutto delle preziosissime indicazioni di
Anthony. Sono tre macro in una ma si possono estrapolare in tre macro singole.
Ho aggiunto delle macro casarecce per scrivere sui fogli che esattamente la macro
richiama anticipata da un MasBox (volendo si può commentare (‘)
Aggiungo che le macro ( macro_Colonna_A, macro_Colonna_B, macro_Geppo)
non sono utili se non chiamate direttamente dalla macro “Madre”.
Se si manda in esecuzione così’ come la macro legge i nomi della colonna A e scrive
esattamente ed esclusivamente sui fogli riportanti sulla colonna A.
Se si commenta/decommenta una sub e, le sue indicazioni, si possono mandare in
esecuzione le tre macro una per volta.
Attenzione: Ho scritto il nome del foglio “QUi” anziché “Qui” e Geppo non l’ha perdonato!

Ringraziandoti mille e mille volte per il tuo lavoro e la tua, indiscussa disponibilità, cordialmente ikwae

Codice: Seleziona tutto
Sub Cicla_Fogli_Colonna_A()
'Sub Cicla_Fogli_Colonna_B()

'''''''''''''''''''''''''''
'Sub Cicla_Fogli_Tutti()
     'GoTo 10
''''''''''''''''''''''''''
 
 Worksheets("Lista").Select
 
 Set shList = Worksheets("Lista").Range("A2", Range("A" & Rows.Count).End(xlUp))
'Set shList = Worksheets("Lista").Range("B2", Range("B" & Rows.Count).End(xlUp))

For Each sSh In shList
For I = 1 To ThisWorkbook.Sheets.Count

   If Worksheets(I).Name = CStr(sSh) Then
      Worksheets(I).Select
        Call macro_Colonna_A
       'Call macro_Colonna_B
 End If
   
    Next
  Next

'10:
'Call Fogli_Tutti
End Sub

Sub Fogli_Tutti()
For I = 1 To ThisWorkbook.Sheets.Count
If Worksheets(I).Name <> "Qui" And _
   Worksheets(I).Name <> "Quo" And _
   Worksheets(I).Name <> "Qua" Then
   Worksheets(I).Select
Call macro_Geppo
End If
Next I
End Sub

Sub macro_Geppo()

 MsgBox "Geppo Dovrebbe Scrivere Su Tutti I Fogli: " & vbNewLine & vbNewLine & _
  "Foglio5" & ", " & "Foglio6" & "," & " Foglio7" & vbNewLine _
  & "Mele" & ", " & "Pere" & "," & " Uva" & vbNewLine & vbNewLine & _
  "TRANNE I Fogli:  Qui, Quo, Qua"
 
 Range("A6").FormulaR1C1 = "Geppo Dovrebbe Scrivere Su Tutti I Fogli: "
 Range("A7").FormulaR1C1 = "Foglio5, Foglio6, Foglio7"
 Range("A8").FormulaR1C1 = "Mele, Pere, Uva"
 Range("A10").FormulaR1C1 = "TRANNE I Fogli:  Qui, Quo, Qua"
 '
 Range("A10:C10").Select
    Selection.Font.Underline = xlUnderlineStyleSingle
    Range("A1").Select
End Sub

Sub macro_Colonna_A()

MsgBox "Dovrei Scrivere Solo Sui Fogli: " & vbNewLine & vbNewLine & "Foglio5" & ", " & "Foglio6" & "," & " Foglio7"
Range("A5").FormulaR1C1 = "Dovrei Scrivere Solo sui fogli: Foglio5, Foglio6, Foglio7"

End Sub

Sub macro_Colonna_B()

 MsgBox "Dovrei Scrivere Solo Sui Fogli: " & vbNewLine & vbNewLine & "Mele" & ", " & "Pere" & "," & " Uva"
 Range("A5").FormulaR1C1 = "Dovrei Scrivere Solo sui fogli: Mele, Pere, Uva"

End Sub   
Excel 2007
Avatar utente
ikwae
Utente Senior
 
Post: 309
Iscritto il: 27/12/17 23:14


Torna a Applicazioni Office Windows


Topic correlati a "macro cicla fogli da lista":


Chi c’è in linea

Visitano il forum: Nessuno e 59 ospiti