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 :)
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 :)