如何检查调用堆栈

时间:2009-03-25 18:44:43

标签: ms-access vba access-vba callstack

是否可以在VBA中查看MS Access 2003中的CallStack?也就是说,是否可以看到procedurefunction另一个function被称为?{/ p>

4 个答案:

答案 0 :(得分:11)

在运行时,查看菜单 - >调用堆栈(或按CTRL + L)。

答案 1 :(得分:3)

VBA中没有编程方式来查看我所知道的调用堆栈。这个问题的通常解决方案是使用一些结构来跟踪函数的调用,但它似乎总是对我来说是一个问题,并且只在编程时使用(不是在运行时),在这种情况下,在我看来,VBE是查看调用堆栈的内置功能就足够了。

而且,BTW,我总是将调用堆栈按钮放在我的VBE工具栏上,因为它是我最常用的函数之一。我还添加了编译按钮 - 我认为它是疯狂的,默认情况下它不在工具栏上,因为它鼓励人们在不强制编译的情况下进行编码。然后,Access 2000默认情况下甚至没有使用Option Explicit(假设与使用VBE的其他应用程序保持一致 - 换句话说,为了使其与不像代码的应用程序一致而使其与重)。

但我离题了......

答案 2 :(得分:2)

最后,在函数中添加一个可选参数,并以这种方式传递调用者名称。对于表单,您可以使用Me.Name作为参数。

答案 3 :(得分:2)

是的,这是可能的,但它不是很有用!

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

在使用GetCallStackCount和GetCallStackFunction之前调用SetMode(2),然后调用SetMode(1)。