这是我目前的代码:
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
因此,虽然工作簿是开放的并且正在处理,但在某些操作之后变量sumn1,sumn2..etc。 (它们是全局变量)正在获得附加值,例如+10到sumn1,或+5到sumn2,依此类推。因为我希望在关闭工作簿后保存它们,所以我将它们保存在我用“;;;”隐藏的单元格中。
问题是,有时它可以正常工作,但有时(通常在工作簿关闭后经过较长时间后)变量重置为0。
首先,我的方法是关于我如何保存数据或者因为这种方法不好而无法正常工作?如果这是一个好的方法,那么我想我应该在其他地方搜索我的错误。
答案 0 :(得分:1)
在VBA编辑器中单击“重置”或达到“结束”语句时,所有变量也会重置为零。虽然我想不出任何其他场合,但也可能有其他场合。您目前只是在防止关闭和重新打开的工作簿。
所以你的方法很脆弱。
你可以做的是完全删除全局变量,总是引用工作表来设置和检索它们的值。
答案 1 :(得分:0)
您可以使用几个辅助程序来改进您的方法
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
更新值时。显然这需要更多的错误处理等。
将整个变量集加载到单个数组中也可以更容易地维护代码(减少错别字的可能性)并在需要时处理迭代。