【发布时间】:2020-11-09 10:45:07
【问题描述】:
我遇到了一个奇怪的问题,我认为它与 Excel 行为有关,而不是与我的代码有关。
我有一个名为“numEtape”的全局变量,它是一个整数。我的代码包含几个步骤,用户必须在工作表上键入数据,然后按下一个按钮,将数据保存在数组中并递增“numEtape”,然后再进行下一步。
代码(简化)如下所示:
Dim numEtape As Integer
Sub AjoutEssai()
numEtape = 2
UFPreAjoutInfos.Show 'Unrelated Userform that asks user for more informations, but doesn't modify "numEtape" or call any other macro
Call InterfaceFiller
End Sub
Sub InterfaceFiller()
Dim rangedubtn As Range
Dim btnPrecedent As Button
Select Case numEtape
Case 2
'Change value of some cells
Case 3
'Change value of some cells
Case 4
'Change value of some cells
Case Is >= 5
'Change value of some cells
Case Else
Debug.Print "Error"
End Select
Set rangedubtn = Sheets("Interface").Range("M3")
Set btnPrecedent = Sheets("Interface").Buttons.Add(rangedubtn.Left, rangedubtn.Top,rangedubtn.Width, rangedubtn.Height)
With btnPrecedent
.OnAction = "mSuivant"
.Caption = "Suivant"
.Name = "btnSuivant"
End With
End Sub
Sub mSuivant()
numEtape = numEtape + 1
Call InterfaceFiller
End Sub
我不认为代码本身很重要,因为我第一次调用 AjoutEssai(),所以我可以从中得到什么,因为 numEtape 总是大于 2。
但是,当用户在这些步骤中打开和关闭其他 excel/office 文件(其中没有任何 vba 代码/宏)时,excel 似乎清空了 numEtape,这使得Select Case 转到Case Else。
excel什么时候从内存中删除全局变量,有没有办法防止这种行为发生?
【问题讨论】: