你如何测试VBA代码的运行时间?

你如何测试VBA代码的运行时间?

在VBA中是否有代码可以包装一个函数,让我知道它运行的时间,以便我可以比较函数的不同运行时间?



海绵宝宝撒
浏览 2657回答 3
3回答

慕田峪7331174

除非你的功能很慢,否则你需要一个非常高分辨率的计时器。我所知道的最准确的是QueryPerformanceCounter。谷歌更多信息。尝试推下到一个类,把它CTimer说,那么你可以让一个实例全球某处,只是打电话.StartCounter和.TimeElapsedOption&nbsp;ExplicitPrivate&nbsp;Type&nbsp;LARGE_INTEGER &nbsp;&nbsp;&nbsp;&nbsp;lowpart&nbsp;As&nbsp;Long &nbsp;&nbsp;&nbsp;&nbsp;highpart&nbsp;As&nbsp;LongEnd&nbsp;TypePrivate&nbsp;Declare&nbsp;Function&nbsp;QueryPerformanceCounter&nbsp;Lib&nbsp;"kernel32"&nbsp;(lpPerformanceCount&nbsp;As&nbsp;LARGE_INTEGER)&nbsp;As&nbsp;LongPrivate&nbsp;Declare&nbsp;Function&nbsp;QueryPerformanceFrequency&nbsp;Lib&nbsp;"kernel32"&nbsp;(lpFrequency&nbsp;As&nbsp;LARGE_INTEGER)&nbsp;As&nbsp;LongPrivate&nbsp;m_CounterStart&nbsp;As&nbsp;LARGE_INTEGERPrivate&nbsp;m_CounterEnd&nbsp;As&nbsp;LARGE_INTEGERPrivate&nbsp;m_crFrequency&nbsp;As&nbsp;DoublePrivate&nbsp;Const&nbsp;TWO_32&nbsp;=&nbsp;4294967296#&nbsp;'&nbsp;=&nbsp;256#&nbsp;*&nbsp;256#&nbsp;*&nbsp;256#&nbsp;*&nbsp;256#Private&nbsp;Function&nbsp;LI2Double(LI&nbsp;As&nbsp;LARGE_INTEGER)&nbsp;As&nbsp;DoubleDim&nbsp;Low&nbsp;As&nbsp;Double &nbsp;&nbsp;&nbsp;&nbsp;Low&nbsp;=&nbsp;LI.lowpart&nbsp;&nbsp;&nbsp;&nbsp;If&nbsp;Low&nbsp;<&nbsp;0&nbsp;Then &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Low&nbsp;=&nbsp;Low&nbsp;+&nbsp;TWO_32&nbsp;&nbsp;&nbsp;&nbsp;End&nbsp;If &nbsp;&nbsp;&nbsp;&nbsp;LI2Double&nbsp;=&nbsp;LI.highpart&nbsp;*&nbsp;TWO_32&nbsp;+&nbsp;LowEnd&nbsp;FunctionPrivate&nbsp;Sub&nbsp;Class_Initialize()Dim&nbsp;PerfFrequency&nbsp;As&nbsp;LARGE_INTEGER &nbsp;&nbsp;&nbsp;&nbsp;QueryPerformanceFrequency&nbsp;PerfFrequency &nbsp;&nbsp;&nbsp;&nbsp;m_crFrequency&nbsp;=&nbsp;LI2Double(PerfFrequency)End&nbsp;SubPublic&nbsp;Sub&nbsp;StartCounter() &nbsp;&nbsp;&nbsp;&nbsp;QueryPerformanceCounter&nbsp;m_CounterStartEnd&nbsp;SubProperty&nbsp;Get&nbsp;TimeElapsed()&nbsp;As&nbsp;DoubleDim&nbsp;crStart&nbsp;As&nbsp;DoubleDim&nbsp;crStop&nbsp;As&nbsp;Double &nbsp;&nbsp;&nbsp;&nbsp;QueryPerformanceCounter&nbsp;m_CounterEnd &nbsp;&nbsp;&nbsp;&nbsp;crStart&nbsp;=&nbsp;LI2Double(m_CounterStart) &nbsp;&nbsp;&nbsp;&nbsp;crStop&nbsp;=&nbsp;LI2Double(m_CounterEnd) &nbsp;&nbsp;&nbsp;&nbsp;TimeElapsed&nbsp;=&nbsp;1000#&nbsp;*&nbsp;(crStop&nbsp;-&nbsp;crStart)&nbsp;/&nbsp;m_crFrequencyEnd&nbsp;Property

catspeake

VBA中的定时器功能为您提供从午夜到1/100秒的经过秒数。Dim t as singlet = Timer'codeMsgBox Timer - t
打开App,查看更多内容
随时随地看视频慕课网APP