相关疑难解决方法(0)

什么时候应该杀死Excel VBA变量或将其设置为Nothing?

在过去的两年里,我一直在教自己Excel VBA,我认为有时候在代码段的末尾处理变量是合适的.例如,我已经看到它改编自Ron de Bruin将Excel转换为HTML的代码:

Function SaveContentToHTML (Rng as Range)

        Dim FileForHTMLStorage As Object
        Dim TextStreamOfHTML As Object
        Dim TemporaryFileLocation As String
        Dim TemporaryWorkbook As Workbook

...

        TemporaryWorkbook.Close savechanges:=False
        Kill TemporaryFileLocation
        Set TextStreamOfHTML = Nothing
        Set FileForHTMLStorage = Nothing
        Set TemporaryWorkbook = Nothing

End Function
Run Code Online (Sandbox Code Playgroud)

我已经对此进行了一些搜索,发现除了如何做之外几乎没有什么,并且在一个论坛中发布了一个声明,即不需要清除局部变量,因为它们不再存在于End Sub.我猜测,基于上面的代码,可能不是真的End Function,或者在我没有遇到过的其他情况下.

所以我的问题归结为:

  • 网上有什么地方可以解释变量清理的时间和原因,而我还没有找到它?

如果没有,请有人在这里解释......

  • 何时需要对Excel VBA进行变量清理,何时不进行?
  • 更具体地说......是否存在特定的变量用法(公共变量?函数定义的变量?),它们在内存中加载的时间比sub要长,如果我不自行清理,可能会造成麻烦?

variables excel vba excel-vba

29
推荐指数
2
解决办法
9万
查看次数

VBA中的Sentry对象

我在网络和我自己的项目中无处不在地看到具有以下模式的代码:

Sub Func()
     Application.EnableEvents = False
     ' some code
     Application.EnableEvents = True
End Sub
Run Code Online (Sandbox Code Playgroud)

由于VBA对象的生命周期似乎是确定性的,我认为我可以像我们所做的那样用所谓的哨兵对象替换这个模式C++,这样就可以自动解决异常退出(err.raise)的问题.

但是怎么样?我不知道,因为我是新手,VBA甚至不知道什么时候通过引用传递对象.理想情况下,我希望代码看起来像这样:

Sub Func()
     dim Sentry
     Set Sentry = CreateSentry(Application.EnableEvents,False)

     ' From now on we should not need to care if the variable was actually 
     ' True or False beforehand, what kind of error handling is used in this function, etc.
End Sub
Run Code Online (Sandbox Code Playgroud)

excel vba excel-vba

1
推荐指数
1
解决办法
139
查看次数

标签 统计

excel ×2

excel-vba ×2

vba ×2

variables ×1