eseguire una macro Excel in tutti i fogli della cartella di lavoro

2,642 views
Skip to first unread message

Fabio Fable

unread,
Aug 31, 2012, 6:00:10 AM8/31/12
to excel_v...@googlegroups.com
Buongiorno a tutti ! Sono nuovo del forum e purtroppo so poco e niente di programmazione VBA. Ho eseguito una macro che copia e incolla solo i valori di un intervallo su un altro intervallo di celle e poi li ordina. Ora vorrei che la macro venisse eseguita in tutti i fogli che compongono la cartella di lavoro ma se seleziono tutti i fogli ed eseguo la macro ovviamente ottengo un errore. Si tratterebbe di creare un ciclo (che in Basic era for...next) per cui vengano selezionati uno alla volta tutti i fogli di lavoro e venga eseguita la macro. Potete aiutarmi ? Grazie !!

Sub Macro1()
'
' Macro1 Macro
' Macro registrata il 31/08/2012 da Administrator
'
' Scelta rapida da tastiera: CTRL+t
'
    Range("I6:K14").Select
    Selection.Copy
    Range("I33").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Application.CutCopyMode = False
    Selection.Sort Key1:=Range("I33"), Order1:=xlDescending, Header:=xlNo, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal 
End Sub  

roberto mensa

unread,
Aug 31, 2012, 6:05:35 AM8/31/12
to excel_v...@googlegroups.com
se la struttura dei fogli è identica risulta semplice eseguire un ciclo:

sub r()
dim sh as worksheet

for each sh in thisworkbook.worksheets
sh.activate
sh.select
macro1
next
end sub

prova!
ciao
r


--
Hai ricevuto questo messaggio in quanto sei iscritto al gruppo "Excel VBA" di Google Gruppi.
Per mandare un messaggio a questo gruppo, invia una email a
excel_v...@googlegroups.com
Per modificare la tua iscrizione
http://groups.google.it/group/excel_vba_free/subscribe?hl=it
Per maggiori opzioni, visita questo gruppo all'indirizzo
http://groups.google.it/group/excel_vba_free?hl=it?hl=it

Fabio Cecchinato

unread,
Aug 31, 2012, 6:14:10 AM8/31/12
to excel_v...@googlegroups.com
Grazie mille !!!
Quello che mi mancava era proprio (purtroppo non so quasi nulla di VBA) il 
"for each sh in thisworkbook.worksheets"
A dire il vero, cercando nei newsgroups, ho modificato il codice in questo modo:

Sub Macro1()
'
' Macro1 Macro
' Macro registrata il 31/08/2012 da Administrator
'
' Scelta rapida da tastiera: CTRL+t
'
For Each ws In ActiveWorkbook.Worksheets
ws.Select
    Range("I6:K14").Select
    Selection.Copy
    Range("I33").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Application.CutCopyMode = False
    Selection.Sort Key1:=Range("I33"), Order1:=xlDescending, Header:=xlNo, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal
     '   End With
Next ws
End Sub

e pare funzionare alla perfezione !! Grazie ancora per il tuo aiuto ! 

roberto mensa

unread,
Aug 31, 2012, 6:40:03 AM8/31/12
to excel_v...@googlegroups.com
beh ... select non sono quasi mai necessari e sempre meglio evitarli
... così se vogliamo migliorare un po' il codice possiamo fare così:
Sub Macro1()
Dim ws As Worksheet
Dim rng_1 As Range
Dim rng_2 As Range

For Each ws In ActiveWorkbook.Worksheets
Set rng_1 = ws.Range("I6:K14")
Set rng_2 = ws.Range("I33").Resize(rng_1.Rows.Count, rng_1.Columns.Count)
rng_2.Value = rng_1.Value
rng_2.Sort Key1:=rng_2(1), Order1:=xlDescending, Header:=xlNo, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
Next ws
End Sub


non dimenticare mai di usare option explicit e quindi dichiarare tutte
le tue variabili.
saluti
r
Reply all
Reply to author
Forward
Message has been deleted
0 new messages