Devi ingegnarti un po'...
All'apertura del foglio di calcolo parte automaticamente l'evento Workbook.open del foglio appena aperto.
Ad esempio, prendiamo due fogli, 1.xls e 2.xls.
in 1.xls mettiamo questa routine (evento workbook_open):
- Codice: Seleziona tutto
Private Sub Workbook_Open()
Stop
numero = Application.Workbooks.Count
For x = 1 To numero
If nome = Workbooks(x).Name = "2.xls" Then GoTo FINE
Next
messaggio=msgbox("La macro è partita!",vbokonly+vbi)
FINE:
End Sub
(Salva e chiudi questo foglio)
Nel file 2.xls, invece mettiamo, in un modulo qualunque, queste istruzioni:
- Codice: Seleziona tutto
Sub a()
apri = Application.GetOpenFilename("Text Files (*.xls), *.xls")
Workbooks.Open (apri)
End Sub
- Se ora lanci la macro del foglio 2 ed apri il foglio 1, vedi che la sua workbook_open fa una "scansione" dei fogli attivi e, siccome trova che c'è il foglio 2 aperto... non fa niente.
- Se invece apri il foglio 1 senza aver aperto il 2, ti compare una message box.
--------------------------------------------------------------------------------
Se hai bisogno di poter utilizzare le macro del foglio 1 anche con il 2 aperto, puoi mettere un flag (vero/falso) in una cella d'appoggio, ad esempio Z1. Questo flag viene commutato all'inizio ed alla fine dell'esecuzione della routine che apre l'altro file.
[codice del foglio 2.xls]
- Codice: Seleziona tutto
Sub a()
range("z1").formula=true 'Attiva "Macro_lock" (TM) :)
apri = Application.GetOpenFilename("Text Files (*.xls), *.xls")
Workbooks.Open (apri)
range("z1").formula=false 'Disattiva "Macro_lock (TM) :)
End Sub
A quel punto dovrai fare in modo che l'evento Workbook_Open del foglio 1, una volta trovato che l'altro è aperto, vada a vedere il contenuto di quella cella.
Il codice del foglio 1 quindi diventerà:
[Codice del foglio 1.xls]
- Codice: Seleziona tutto
Private Sub Workbook_Open()
Stop
numero = Application.Workbooks.Count
For x = 1 To numero
If nome = Workbooks(x).Name = "2.xls" Then
macro_lock=workbooks(x).sheets(1).range("z1).value
if macro_lock=true then goto FINE
EndIf
Next
messaggio=msgbox("La macro è partita!",vbokonly+vbi)
FINE:
End Sub
La spiegazione è un po' contorta... forse. Se qualcuno sa fare di meglio, sarò felice anch'io di non dove più implementare tutto 'sto meccanismo nei progetti unpo'complessi!
Ciao,
MAx[/b]