Comment inspecter la pile d'appel
-
22-08-2019 - |
Question
Serait-il possible de voir le CallStack
en VBA pour MS Access 2003? C'est-à-dire, serait-il possible de voir de ce que procedure
ou une autre function
function
a été appelé?
La solution
Il n'y a aucun moyen de programmation en VBA pour afficher la pile d'appel que je connaisse. La solution habituelle à ce problème est d'utiliser une structure pour suivre l'appel des fonctions, mais il semble toujours comme une bidouille pour moi, et vraiment utile que lors de la programmation (non à l'exécution), auquel cas il me semble que ce VBE capacité intégrée pour voir la pile d'appel suffit.
Et, d'ailleurs, je mets toujours le bouton de pile d'appel sur ma barre d'outils VBE, car il est l'une des fonctions les plus fréquemment utilisées pour moi. J'ajoute également le bouton de compilation - Je pense qu'il est fou que ce n'est pas la barre d'outils par défaut, car il encourage les gens à code sans jamais forcer une compilation. Là encore, Access 2000 n'a même pas utiliser l'option explicite par défaut (soi-disant souci de cohérence avec les autres applications utilisant le VBE - autrement dit, muet d'accès vers le bas afin de le rendre compatible avec les applications qui ne sont pas presque aussi code- lourds).
Mais je digresse ...
Autres conseils
Lors de l'exécution, le menu Affichage -.> Pile d'appels (ou appuyez sur CTRL + L)
Finalement, ajoutez un paramètre optionnel à votre fonction, et passer le nom de l'appelant de cette façon. Pour les formes, vous pouvez utiliser Me.Name
comme paramètre.
Oui, il est possible, mais il est pas tout à fait 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
Avant d'utiliser GetCallStackCount et GetCallStackFunction appel setMode (2), et après setMode (1).