2009-03-25 4 views
8

Serait-il possible de voir le CallStack dans VBA pour MS Access 2003? C'est-à-dire, serait-il possible de voir à partir de quoi procedure ou function a été appelé un autre function?Comment faire pour vérifier la pile d'appel

+0

C'est le genre de tâche pour laquelle ASM est bon. – pyon

Répondre

3

Il n'y a pas de manière programmatique dans VBA pour voir la pile d'appels que je connais. La solution habituelle à ce problème est d'utiliser une structure pour suivre l'appel des fonctions, mais cela me semble toujours un truc, et vraiment utile uniquement lors de la programmation (pas au moment de l'exécution), auquel cas il me semble que le VBE capacité intégrée pour voir la pile d'appels est suffisante. Et, BTW, j'ai toujours mis le bouton de pile d'appel sur ma barre d'outils VBE, puisque c'est l'une des fonctions les plus fréquemment utilisées pour moi. J'ajoute aussi le bouton de compilation - Je pense que c'est fou de ne pas être dans la barre d'outils par défaut car cela encourage les gens à coder sans jamais forcer une compilation. Encore une fois, Access 2000 n'utilisait même pas Option Explicit par défaut (supposément par souci de cohérence avec les autres applications utilisant le VBE - en d'autres termes, accolade Access afin de le rendre cohérent avec les applications qui ne sont pas presque codées lourd).

Mais je digresse ...

9

Lors de l'exécution, menu Affichage -> Pile d'appel (ou appuyez sur CTRL + L).

2

Finalement, ajoutez un paramètre optionnel à votre fonction, et passer le nom de l'appelant de cette façon. Pour les formulaires, vous pouvez utiliser Me.Name comme paramètre.

0

Oui, c'est possible, MAIS ce n'est pas très 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).

Questions connexes