gpt4 book ai didi

excel - VBA Excel : Local variables stored in memory?

转载 作者:行者123 更新时间:2023-12-04 21:17:04 25 4
gpt4 key购买 nike

在 VBA Excel 中,

我听说声明变量很好,没有进一步的用处,如 Nothing在模块末尾以节省内存。

例子:

Dim myRange As Range

Sub Main

set myRange = Sheets("Sheet1").range("A1:H20")
' Do Something
' ...
set myRange = Nothing

End Sub

这个说法有道理还是 VBA Excel 会自动处理这个问题?

最佳答案

在您的过程范围内声明的变量随后会被正确销毁。

所以在你的例子中,因为 myRangeMain 范围内定义它被适本地销毁/清理。

但是,如果您有一个包含此代码的模块:

Public testForStackOverflow As Range

Sub main()
Call mySubSub
MsgBox testForStackOverflow.Address

Call mySubDestroyer
If (testForStackOverflow Is Nothing) Then
MsgBox "destroyed"
End If

Call mySubSub
End Sub

Sub mySubSub()
Set testForStackOverflow = Range("A1")
End Sub
Sub mySubDestroyer()
Set testForStackOverflow = Nothing
End Sub

Sub callAfterRunningMain()

MsgBox testForStackOverflow.Address
End Sub
mySubSub 之后全局不会自动清理(正如预期的那样)。

你可能没想到的是,如果你运行 callAfterRunningMain运行 main 后方法,你的全局仍然有一个值。除非您手动执行此操作、关闭 Excel 或使用 End,否则不会清除此全局。在您的代码中的某处。

因此,如果您大量使用全局变量并且没有以某种方式清理它们,您将无限期地将它们保留在内存中。这是用户表单和使用 UserForm.hide 的情况。对比 Unload Me顺便说一句。

相关问题并没有真正解决我所描述的问题,而且可能会令人困惑。特别是在尝试“重置”用户窗体时。

关于excel - VBA Excel : Local variables stored in memory?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18382310/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com