vba 结束后怎样释放内存?
释放内存一般指存储在内存里的变量、数组、运行代码存储空间的释放。这里其实需要分2种情况。一种是数组、变量和代码的存储空间都是在程序运行完成后由操作系统自动进行内存的回收,也就是自动释放了内存,详细的可看看以下vb语言对变量存活期的说明。另一种是在程序过程中某些数组内存后续过程不再使用了,而特别使用代码将数组内存直接释放的情况,例如ERASE语句。
一、变量的存活期
变量保留其值的这段时间,称为生存周期。变量的值可能在整个生存周期都在改变,但它仍然保留着一些值。当变量失去了范围之后,它也就不再保存着任一个值。
当过程开始运行时,所有的变量都会被初始化。一个数值变量会初始化成
0,变长字符串被初始化成零长度的字符串 (""),而定长字符串会被填满 ASCII 字符码 0 所表示的字符或是 Chr(0)。Variant变量会被初始化成 Empty。用户定义类型中每一个元素变量会被当成个别变量来做初始化。
当声明一个对象变量时,内存中虽有保留空间,但它的值会被设置成
Nothing,直到利用 Set 语句对它指定一个对象引用。
如果在代码的运行期间,变量的值一直没有改变,则它会继续保有它的初始值直到它丢失范围为止。
Dim 语句声明过程的级别变量将保留一个值,直到此过程退出为止。如果该过程调用其它的过程,则在这些过程正在运行的同时,属于调用者过程的变量也保留它的值。
如果过程的级别变量是用 Static 关键字来声明的,则只要代码正在任何模块中运行此变量仍会保留它的值。而当所有的代码都完成运行后,变量会失去它的范围和它的值。所以它的存活期和模块级别的变量是一样的。
模块级别的变量与静态变量是不同的。在标准模块或类模块中变量会保留它的值,直到停止运行代码。在对象类模块中,只要仍有一个属于此对象类的实例存在,则变量会一直保留它的值。模块级别的变量会一直占用内存资源,直到重新设置它们的值,所以只有在必要时才使用它们。
如果在 Sub 或 Function 语句前加上 Static 关键字,则在此过程中所有过程级别的变量的值被保留在调用期间。
二、erase语句: