VBA如何释放函数占用的资源?

我有A,B两个VBA函数,如果先运行A,再接着运行B会变得很慢(要好几分钟),如果运行A之后关闭excel表格,再打开,再运行B,则会快很多(几秒钟),这是怎么回事啊?函数不会自己清理内存的吗?A里面主要是打开其他表格,复制数据等操作,A本身很快,但是它运行完后,如果不关闭excel,B会很慢。
A有一个字符型的参数x,即function A( x ),其余所有变量都是在A里面定义的。现在问题是如何彻底释放A的资源,因为A的操作是对表格的,不需要留存任何数据,A完全结束后B再独立运行!
B函数绝大部分时间耗费在一个用来替换字符的子函数里,其代码如下:
Function rechange(n)
Set Obj = Nothing
Dim c(1 To 100) As String
Dim d(1 To 100) As String
c(1) = " "
d(1) = ""
c(2) = "("
d(2) = "("
c(3) = ")"
d(3) = ")"
For i = 1 To 100
If c(i) = "" Then
Exit For
End If
Cells.Replace What:=c(i), Replacement:=d(i), LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Next i
End If
Set Obj = Nothing
End Function

(另外还替换啦十几组中文字符,反正函数结构就是这样子的,每次都慢在这里,是不是跟单元格的选定有关,我A操作的时候都是用60000行来操作的。

没有具体函数不好说
释放对象的话
Set Obj=nothing追问

谢谢,我把最浪费时间的函数结构发上来,字数限制,我精简啦一些,你帮我看看能不能找出问题来,不尽感激!

追答

首先我说的释放资源你没理解正确,就是说Set Obj=nothing中的Obj指的是一个对象
比如这段代码:
dim Rg as Range
set Rg=range("A1")
set rg=nothing
这个属于释放资源
1、至于你说的浪费时间的函数结构,我看了一下,首先注意传递进来的n变量,是否会导致数据的重复替换,意思就是已经替换成功后,再做重复的检索替换操作(这就属于无效的)
2、如果不是这种情况,请检查替换操作的时候是否有大量的公式运用。也就是说替换单元格的时候,会导致公式的重算。
3、是否在SheetChange事件中进行过数据处理,有的话,在代码运行的时候对代码的影响比较大。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-11-20
释放就是了追问

我问的问题正是“如何”释放,具体的语句是什么?求大侠指点,谢谢!

相似回答