Excel VBA:出于某种原因,variables重置为0

这是我目前的代码:

Private Sub Workbook_Open() sumn1 = Sheets("Main").Cells(1, 1).Value sumn2 = Sheets("Main").Cells(2, 1).Value sumn3 = Sheets("Main").Cells(3, 1).Value sumn4 = Sheets("Main").Cells(1, 2).Value sumn5 = Sheets("Main").Cells(2, 2).Value sumn6 = Sheets("Main").Cells(3, 2).Value End Sub Private Sub Workbook_BeforeClose(Cancel As Boolean) Sheets("Main").Cells(1, 1) = sumn1 Sheets("Main").Cells(2, 1) = sumn2 Sheets("Main").Cells(3, 1) = sumn3 Sheets("Main").Cells(1, 2) = sumn4 Sheets("Main").Cells(2, 2) = sumn5 Sheets("Main").Cells(3, 2) = sumn6 End Sub 

所以,当工作簿是开放的,它正在工作,在一些行动后,variablessumn1,sumn2..etc。 (这是全局variables)正在获得附加值,如+10到sumn1,或+5到sumn2等。 因为我希望在closures工作簿后保存它们,所以我把它们保存在一个隐藏着“;;;”的单元格中。

问题是,有时它可以正常工作,但有时(通常在工作簿从此之后已经closures更长的时间后)variables重置为0。

首先,我的方法对于我如何保存数据或者它只是不工作是好的,因为这种方法是不好的? 如果这是一个好的方法,那么我想我应该在别的地方寻找我的错误。

当在VBA编辑器中单击“重置”或达到“结束”语句时,所有variables也会重置为零。 可能还有其他的场合,虽然我想不出来。 您目前只是在防止工作簿被closures并重新打开。

所以你的方法是脆弱的。

你可以做的是全部删除全局variables,并且总是参考工作表来设置和检索它们的值。

你可以用一些辅助例程来改进你的方法

 Dim gVars as Variant Sub LoadVariables() ' Load data from s/s into variable gVars = Sheets("Main").Range(Cells(1, 1), Cells(3, 2)).Value End sub Sub SaveVariables() ' Save data from variable into variables Sheets("Main").Range(Cells(1, 1), Cells(3, 2)).Value = gVars End sub 

然后在您的代码中使用LoadVariables当您需要使用数据(通常在任何子需要它的开始)和SaveVariables当您更新的值。 显然这需要更多的error handling等。

将整个variables集合加载到单个数组中也使维护代码变得更容易(减less拼写错误的几率),并在需要时处理迭代。