di Anthony47 » 20/11/12 00:13
Come dici, quando la macro chiamata (tramite Call Macro) finisce, il controllo torna alla macro chiamante; basta quindi inserire Sheets("Foglio1").Select e sei certo che Foglio1 e' nuovaente attivo.
L' alternativa e' che usi sempre un riferimento esclicito ai fogli, rendendoti cosi' indipendente dal foglio al momento attivo; questa tecnica e' certamente da preferire, ma purtroppo e' piu' incline a nascondere gli errori.
Esistono numerosi "eventi" che innescano delle "macro di evento", ad esempio esise un evento Worksheet_Change e la possibilita' della relativa macro di gestione [Private Sub Worksheet_Change(ByVal Target As Range)]; le macro di evento vanno inserite nei "moduli di codice" del foglio a cui l' evento e' legato; un modo rapido per arrivare a questo modulo e' fare tasto dx sul tab col nome del foglio in discussione, e qui scegliere Visualizza codice.
Ci sono anche eventi a livello di Workbook, che vanno messi nel modulo ThisWorkbook.
Le macro di evento ovviamente si scatenano nel momento in cui l' evento si manifesta, se gli eventi sono abilitati (che presuppone che essi possano essere abilitati o disabilitati, con Application.EnableEvents = True /Application.EnableEvents = False); con la Call invece sai esattamente la situazione complessiva, quindi e' piu' facile da gestire.
Infine, prima di pensare a una gestione di evento, suggerisco di verificare se le circostanze che hai in mente realmente generano un "evento" (semplificando, gli eventi "in genere" sono legati a operazioni fatte dall' utente, es la digitazione di un dato, l' attivazione di un foglio, ...; ma hai visto anche eventi tipo "document complete" che invece dipende dal caricamento di un documento).
Ciao