如何清除 Excel VBA 中的静态变量?

kmc*_*coy 5 static vba

我在 Sub 中定义了一个静态变量:

Private Sub assignVars()
' Use this function to assign default values

    Static isSet As Integer

    If isSet <> 1 Then
        ' do something

        isSet = 1
    End If

End Sub
Run Code Online (Sandbox Code Playgroud)

我对我的代码进行了一些更改,并希望重置静态变量“isSet”。有没有简单的方法可以在不关闭 Excel 并再次打开它的情况下执行此操作?

jto*_*lle 3

End最简单的方法是在立即窗口中执行该语句。

然而,这将破坏所有存储的状态 - 即所有模块级变量、所有过程中的所有静态变量等。Unload并且Terminate事件不会触发等:

http://msdn.microsoft.com/en-us/library/gg251671.aspx

(在我重新阅读你的问题后,我编辑了下面的内容......)

要仅在一个例程中导致状态丢失,您可以手动注释掉 的声明isSet,然后恢复它。您可以在 VBE 的“工具...选项”菜单的“常规”选项卡下进行一项设置,这样您就会在发生这种状态丢失时收到通知。(不过,它不会针对 的调用发出警报End,大概是因为在这种情况下您不需要任何警告。)

您没有要求这样做,但如果您希望能够在不编辑任何代码的情况下重置一个过程中的一个静态变量,您将不得不做一些像这样的笨拙的事情:

Public Sub assignVars(Optional reset As Boolean)
    Static isSet As Integer

    If reset Then
        isSet = 0

        Exit Sub
    End If

    If isSet <> 1 Then
        isSet = 1
    End If
End Sub
Run Code Online (Sandbox Code Playgroud)

请注意,我必须创建您的例程Public,以便您可以从立即窗口中使用True需要重置的参数来调用它。

如果您需要某种可以从过程外部访问的状态,在这种情况下为了能够手动重置它,您可能会考虑使用模块级变量而不是Static过程级变量。然后您的例程可以保留Private,不会因为重置而弄脏其接口,并且您可以手动更改模块级变量。