用作项目计数器的静态变量的生命周期

时间:2015-09-21 17:03:09

标签: excel vba excel-vba static

我已声明一个静态变量用作项目计数器。电子表格将由运行代码的不同人员更新,然后保存工作簿。但是,当我测试我的代码并对其进行任何更改时,静态变量将重置为1

Static strn, mechn, ein As Integer
Dim i, lrow As Long
Dim num as String
Set wb = ThisWorkbook
Set ws = wb.Sheets("test")

lrow = ws.Range("A" & Rows.Count).End(xlUp).Row

i = 1

If reqb = "blah" Then

    Do Until ws.Range("B" & i).Value = "bloop"
        i = i + 1
    Loop

    strn = strn + 1

    num = "1-" & strn

End If  

我在完成代码后会重置吗?

2 个答案:

答案 0 :(得分:3)

正如您的回答评论中所述,您的静态'每当项目/工作簿关闭时,变量都会重置。要创建永久变量,请将其附加到excel对象。如评论中所述,最简单的方法是将值分配给单元格;其他选项包括创建不可见的形状和调整该形状的标题等。

答案 1 :(得分:0)

变量在关闭的项目/工作簿中继续存在的另一个选择是使用环境。这里的优点是当 Excel 应用程序关闭时变量会消失。

可以通过“kernel32”函数“SetEnvironmentVariableA”设置环境,例如使用“WScript.Shell”对象读取。请注意,“Environ”函数不会反映通过 Set 函数所做的更改。

示例:

    Declare Function SetEnvVar Lib "kernel32" Alias "SetEnvironmentVariableA" _
    (ByVal lpName As String, ByVal lpValue As String) As Long

    Function GetEnvVar(VarName As String)
        Set Ex = CreateObject("WScript.Shell").Exec("cmd /C echo %" & VarName & "%")
        GetEnvVar = Ex.StdOut.ReadLine
    End Function 'GetEnvVar

    Sub Main()
        SetEnvVar "MyVar", "My Info"
        MyVar = GetEnvVar("MyVar")      ''' MyVar = "My Info"
        NotMyVar = Environ("MyVar")     ''' NotMyVar = ""
    End Sub 'Main