Déterminer le nom de la procédure où l'erreur s'est produite.
(Q) J'ai de la difficulté à déterminer, en mode d'exécution, la
procédure où s'est produit une erreur; y a-t-il une façon de déterminer le
nom de cette procédure, automatiquement, par programmation?
(A) L'interface utilisateur sous VBE (Access 2000 et 2002) permet de visionner le stack (menu: View | Call Stack...). Malheureusement, VBA
ne nous offre pas une propriété ou une méthode pour accéder à cette information.
Cependant, vous pouvez y parvenir en ajoutant le code approprié. Selon la
complexité, vous pouvez construire une pile (stack) sur
laquelle vous déposerez et retirerez (push and pop) le nom de la procédure en
y entrant et en y sortant, tel que décrit dans le bouquin "Microsoft Access 95 How"
par Getz et Litwin, ou encore, maintenir une variable globale à cette
fin. Par exemple, utilisant une variable globale:
Public pstrProcName as string
Public pstrSubProcName as string
Par la suite, pour chacune de vos procédures, au début
du code, assigner ces variables par le nom de la procédure, comme par exemple:
Sub button1_click()
PstrProcName = "button1_click()"
Call sShowMsg
Msgbox pstrProcName
End sub
Sub sShowMsg()
PstrSubprocName = "sShowMsg"
Msgbox "You are in procedure: " & pstrSubProcName
End sub
L'exemple illustre l'utilisation de PstrSubprocName. En effet, si la seconde procédure avait utilisé la même variable, PstrProcName, dans sShowMsg, lors du retour de Call sShowMsg, le mauvais nom de procédure aurait été retourné par le message.