问题:
有没有办法跟踪在打开表单期间发生的所有对subs和函数的调用(有点像历史“Call Stack”)?我对在填充控件的查询中调用的函数不感兴趣,只对表单或控件级别的函数感兴趣。
背景:
我的表单加载时间比我认为的要长得多。我认为一些事件过程正在多次运行,以响应被重新获取的控件并调用特定的“on_click”过程。
我在每个sub的开头插入了以下代码,并在VBA中为表单插入了函数:
sProcList = sProcList & "lstContacts_Click" & nl
其中:
sProcList
是全局字符串变量"lstContacts_Click"
是字符串/函数的名称nl
功能正常vbCRLF
当表单完全打开后检查变量时,sProcList是这样的:
Form_Open
ChangeSortOrder 1
lstContacts_Click
这实际上是我想要发生的事情,但我不相信这是准确的。我不知道更好的方法。
答案 0 :(得分:0)
由于性能是一个问题,你需要一些更强大的功能,它不仅可以跟踪子程序名称,还可以跟踪在这些子程序中花费的时间。这将导致您找到最大的罪犯,然后您可以通过在这些例程中的代码段周围添加计时器来磨练。 多年前,我被聘请来修复一个新开发的Access数据库的性能,该数据库已经交付给70多个国家,但在某些条件下有2分钟的响应时间。 简而言之,我做了以下(我将跳过完整描述): 1.创建一个包含字段的表,用于存储“开始或结束”模块名称,子例程,日期,计时器,经过时间,字节数,接收数,I / O数等。 2.设计一个可以打开包含代码(表单,报告,模块)的所有内容的表单;提供了选择所需对象的能力。 3.除非排除,否则代码会自动插入子程序的顶部以记录“开始”记录,并且无论何时退出,都会记录“结束”。该表单足够智能,可以自定义代码以捕获对象名称和子例程名称。 4.添加了一个子程序来处理开始/结束记录并计算时间,字节,I / O. 作为一个简单的解决方案,您可以: 1.添加子程序StartTimer变量以保存Timer 2.在Sub的顶部,将Timer保存到StartTimer 3.添加Debug.print'Start XYZ'& startTimer所 4.在退出点Calc Timer - StartTimer和debug.print经过的时间。 5.也可以只写一些文本文件。