首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >VBA:程序优化

VBA:程序优化
EN

Stack Overflow用户
提问于 2011-07-01 09:18:57
回答 1查看 79关注 0票数 0

这个问题分为两部分。第一个是看看是否有一个快速和简单的代码,我可以合并到我的当前的子,以检查该子将采取多快运行。我只需要精确到几秒钟,甚至几分钟。

第二,我目前正在努力优化我的潜艇的运行时间。它是一个搜索函数,允许用户指定要搜索哪些变量并在下面的工作表中显示结果。我已经上网了,我做了以下的通用应用程序,以加快我的程序

  1. 在“子
  2. ”开头禁用屏幕更新,尽量避免复制和粘贴到剪贴板上

然而,每次用户运行搜索时,我的程序仍然需要5到10秒才能运行。这一次我想尽量减少。

我意识到如果不看我的代码,很难给出具体的建议,但我目前只是在寻找一般性的建议。如果在实现了一般原则之后仍然很慢,我将在这里发布我的代码。

我的搜索程序是一个线性搜索程序,并将值存储到一个数组中。不过,我的搜索函数可以容纳多达4个搜索变量,我将每个搜索存储在一个数组中,并将最后的数组合并为一个最终的结果数组。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-07-01 09:44:46

我通常使用GetTickCount API函数。只要你不打算在几周或几个月内测量时间,它就应该是准确的。下面是一个例子,它显示了正在计时的不同的循环措施。1滴答= 1ms

代码语言:javascript
复制
Private Declare Function GetTickCount Lib "kernel32" () As Long 

Sub test() 
Dim nTime 

nTime = GetTickCount 
Set load_array = Range("a5:z65000") 
array_index = WorksheetFunction.Match("Test 15", WorksheetFunction.Index(load_array, 0, 1), 0) 

rngtimer = GetTickCount - nTime 


nTime = GetTickCount 
load_array = Range("a5:z65000").Value 
array_index = WorksheetFunction.Match("Test 15", WorksheetFunction.Index(load_array, 0, 1), 0) 

arraytimer = GetTickCount - nTime 


nTime = GetTickCount 
load_array = Range("a5:z65000").Value 
For a = LBound(load_array) To UBound(load_array) 
If load_array(a, 1) = "Test 15" Then 
array_index = a 
End If 
Next 

arraylooptimer = GetTickCount - nTime 

nTime = GetTickCount 

For a = 1 To 65000 
If Range("a5").Offset(a, 0) = "Test 15" Then 
array_index = a 
End If 
Next 

excelooptimer = GetTickCount - nTime 

MsgBox ("Range Search: " & rngtimer & vbCrLf & _ 
"Array Search: " & arraytimer & vbCrLf & _ 
"ArrayLoop Search: " & arraylooptimer & vbCrLf & _ 
"ExcelLoop Search: " & excelooptimer) 
End Sub 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6545997

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档