Come Controllare Stack di chiamate
-
22-08-2019 - |
Domanda
Sarebbe possibile vedere la CallStack
in VBA per MS Access 2003? Vale a dire, sarebbe possibile vedere da ciò che procedure
o function
un'altra function
è stato chiamato?
Soluzione
Non c'è modo programmatico in VBA per visualizzare lo stack di chiamate che io sappia. La soluzione più comune a questo problema è quello di utilizzare una struttura per monitorare chiamate di funzioni, ma sembra sempre come un ripiego per me, e davvero di utilizzare solo durante la programmazione (non in fase di esecuzione), nel qual caso mi sembra che la VBE del built-in capacità di vedere lo stack di chiamate è sufficiente.
E, a proposito, ho sempre messo il pulsante di stack di chiamate sulla toolbar VBE, dal momento che è una delle funzioni più frequentemente utilizzate per me. Ho anche aggiungere il pulsante di compilazione - penso che sia pazzesco che non è sulla barra degli strumenti per default, perché incoraggia le persone a codice senza mai forzare una compilazione. Poi di nuovo, Access 2000 non ha nemmeno utilizzare Option Explicit per default (presumibilmente per la coerenza con le altre applicazioni che utilizzano il VBE - in altre parole, muti di accesso verso il basso, al fine di renderlo coerente con le applicazioni che non sono quasi come code- pesante).
Ma sto divagando ...
Altri suggerimenti
In fase di runtime, il menu Visualizza -.> Stack di chiamate (o premere CTRL + L)
Alla fine, aggiungere un parametro opzionale per la vostra funzione, e passare il nome del chiamante in quel modo. Per i moduli, è possibile utilizzare Me.Name
come parametro.
Sì, è possibile, ma non è abbastanza utile!
Private Declare Sub SetMode Lib "vba332.dll" Alias "EbSetMode" (ByVal lngMode As Long)
Private Declare Function GetCallStackCount Lib "vba332.dll" Alias "EbGetCallstackCount" (lngCount As Long) As Long
Private Declare Function GetCallStackFunction Lib "vba332.dll" Alias "EbGetCallstackFunction" (ByVal Lvl As Long, ByRef strBase As String, ByRef strModule As String, ByRef strFunction As String, ByRef Done As Long) As Long
Prima dell'uso GetCallStackCount e GetCallStackFunction chiamata setmode (2), e dopo setmode (1).