VBA如何在With object语句中的Exit Sub之前清除对象



我在With语句中使用了Exit Sub,以避免下面代码中的Set语句。这会清除物体吗?或者有办法做到这一点吗?

Dim FolderPathStr As String
With CreateObject("Scripting.FileSystemObject")
If .FolderExists(FolderPathStr) = False Then
MsgBox "Folder does not Exist"
Exit Sub
End If
End With

正如评论所说,VBA具有自动垃圾收集功能。这意味着,当VBA运行时确定不再使用某个对象或变量时,它可能会释放该对象或变量。

在您的示例中,一旦到达End With语句,就无法再访问Scripting.FileSystemObject对象,因此VBA可能会在那里释放该对象。

您是否已将创建的对象分配给对象变量,那么有两种方式可以或将释放对象。示例:

Sub Example
Dim myObject As Object
Set myObject = CreateObject("Scripting.FileSystemObject")
'
' ...whatever you want to do with it...
'
Set myObject = Nothing    ' explicit release of the object
End Sub                       ' implicit release of the object

对象的显式释放通过程序员命令释放对象。如果在不再需要对象的地方继续工作,这可能会非常有用,因为它可以减少程序的资源需求

对象的隐式释放发生在Sub的末尾,因为对象变量不存在-VBA释放变量释放其对象。

最新更新