L'aggiunta di un foglio prevede la creazione di una classe "di appoggio".
Per ogni foglio esistente nella cartella si deve creare questa classe, e ogni volta che si aggiunge un foglio si deve aggiungere un'istanza in più di questa classe.
Questa è la classe, che io chiamo "gestore":
Public WithEvents foglio As Worksheet Private Sub foglio_BeforeRightClick(ByVal Target As Range, Cancel As Boolean) Target.FormulaR1C1 = "CICCIA" Cancel = True End Sub
La sua creazione è soggetta all'apertura della cartella di lavoro:
Codice della cartella di lavoro:
Public mioGestore() As gestore Private Sub Workbook_Open() ReDim mioGestore(Sheets.Count - 1) For n = 1 To Sheets.Count Set mioGestore(n - 1) = New gestore Set mioGestore(n - 1).foglio = Sheets(n) Next n End SubLa matrice di mioGestore è resa pubblica in modo che alla procedura di aggiunta di ogni foglio si possa ampliare con la creazione di una nuova istanza del gestore:
Proviamo a creare un nuovo foglio con creazione di questa nuova istanza, ponendo in Modulo 1 il codice per la funzione "aggiungiFoglio".
Modulo1:
Public mioGestore() As gestore
Sub aggiungiFoglio()
ReDim Preserve mioGestore(UBound(mioGestore) + 1)
MsgBox UBound(mioGestore)
Set mioGestore(UBound(mioGestore)) = New gestore
Set mioGestore(UBound(mioGestore)).foglio = ThisWorkbook.Sheets.Add
End Sub
Però, dato che la dichiarazione di una variabile pubblica nel codice della cartella di lavoro non "funziona", ho spostato qui (in rosso) la dichiarazione della matrice di mioGestore.in modo che il codice della cartella di lavoro diventa:
Cartella di lavoro:
Private Sub Workbook_Open() ReDim mioGestore(Sheets.Count - 1) For n = 1 To Sheets.Count Set mioGestore(n - 1) = New gestore Set mioGestore(n - 1).foglio = Sheets(n) Next n End SubFunziona.
Anzi, tolgo quella MsgBox nel codice del Modulo 1, che avevo messo per verificare se la grandezza della matrice aumentasse.
Public mioGestore() As gestore Sub aggiungiFoglio() ReDim Preserve mioGestore(UBound(mioGestore) + 1) Set mioGestore(UBound(mioGestore)) = New gestore Set mioGestore(UBound(mioGestore)).foglio = ThisWorkbook.Sheets.Add End SubOkay!!!
Nessun commento:
Posta un commento