PDA

View Full Version : [VBA/Excel] Accesso globale all'istanza di una classe


DavideV
28-01-2010, 16:10
Salve a tutti, sto cercando di sviluppare un'applicazione in ambiente VBA/excel.

Sto cercando di definire una classe che gestisca gli errori di digitazione commessi all'inserimento dei dati in alcune TextBox, e che restituisca dei messaggi "comprensibili" ad un utente di basso livello.

Nella mia testa l'implementazione di questa parte del progetto prevede principalmente l'istanziazione, a livello globale, della classe "Errore", così da tenere un solo oggetto custom_err che posso maneggiare in qualsiasi punto del programma.

Per prima cosa mi sono creato il modulo di classe Errore e ho definito proprietà e metodi, il cui più importante al momento è showErr che fa apparire la dialog con il messaggio di errore (vi tralascio quello che non serve)

Moduli di Classe: Errore

// definizione proprietà e metodi privati

Public Sub showErr(i As Integer)
// un po' di codice...
MsgBox messaggio, costante, titolo
End Sub

Successivamente ho creato un modulo, chiamato "Globals", che contiene le variabili globali (spero di metterne il meno possibile! :stordita: ) e dove ho dichiarato la reference della classe Errore:

Moduli: Globals

Dim custom_err As Errore

nel modulo degli oggetti "This_Workbook" ho intercettato l'evento Workbook_Open:


Microsoft Excel Oggetti: ThisWorkBook

Public Sub Workbook_Open()
Set custom_err = New Errore
End Sub


A questo punto all'interno di un altro modulo "ControlloDati" (che ospiterà tutte le routine di controllo) ho inserito una routine che - scusate le ripetizioni - appunto controlla che in alcune celle sia stato inserito un orario in formato valido:

Moduli: ControlloDati

Public Sub controllaData(ctrl As Control)
On Error Resume Next
If ((ctrl.Tag = "orario") And (Not IsDate(ctrl.Text))) Then
custom_err.showerr 1
End If
End If
End Sub


Il problema è che quest'ultima routine non "vede" la reference della classe e mi restituisce "Errore di run-time '424' - Necessario oggetto" (e si capisce anche dal fatto che mi scrive showerr invece di showErr...)

...eppure mi sembra che le dichiarazioni siano a posto, nel senso che messe in quel posto dovrebbero rendere l'istanza della classe visibile globalmente...

Lumi?
Grazie mille e scusate lo sproloquio :)

DavideV
29-01-2010, 08:13
Che idiota...

Moduli: Globals

Dim custom_err As Errore


PUBLIC custom_err As Errore...