2016-05-06 381 views
0

这里是我当前的代码:Excel的VBA:变量重置为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 

所以,虽然该工作簿是开放的,它正在工作,一些动作变量sumn1后,sumn2..etc。 (这是全局变量)正在获得附加值,例如+10到sumn1,或+5到sumn2等等。因为我希望在关闭工作簿后保存它们,所以我将它们保存在一个我用“;;;”隐藏的单元格中。

的问题是,有时它工作正常,但有时(通常较长的时间,因为工作簿已自闭后)变量重置为0。

所以首先,是我的方法如何我的一个好吗我正在保存数据还是因为这种方法不好而无法工作?如果这是一个好方法,那么我想我应该在别的地方寻找我的错误。

+0

您可以使用工作表作为存储选项而不是始终引用变量吗?当然,这种方式可能会使性能下降一小部分,但它会为您存储的值提供更加一致的体验。 *编辑*:Bathsheba击败了我:) – jonifen

+0

这样的代码位于一个工作簿“A”中,并且变量值正在保存在另一个工作簿“B”中,而没有此VBA代码。是否有可能打开工作簿“B”而没有工作簿“A”的VBA并且变量被移动的单元格?那么当你重新打开工作簿“B”时,其他一些具有不同值的单元格已经移动到他们的位置了? –

回答

1

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

所以你的方法是脆弱的。

你可以做的是完全删除全局变量,总是参考工作表来设置和检索它们的值。

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当你已经更新了这些值。很明显,这需要更多的错误处理等。

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

相关问题