2016-05-06 26 views
0

hier ist meine aktuellen Code:Excel VBA: Variablen auf 0 aus irgendeinem Grund das Zurücksetzen

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 

So, während die Arbeitsmappe geöffnet ist, und es hat funktioniert, die in nach einigen Aktionen die Variablen sumn1, sumn2..etc. (das sind globale Variablen) erhalten addierte Werte, wie +10 zu sumn1 oder +5 zu sumn2 und so weiter. Da ich sie nach dem Schließen der Arbeitsmappe speichern möchte, speichere ich sie in einer Zelle, die ich mit ";;;" versteckt habe.

Das Problem ist, manchmal funktioniert es richtig, aber manchmal (in der Regel nach längerer Zeit seit Arbeitsmappe seit geschlossen wurde) zurückgesetzt die Variablen auf 0

Also zunächst ist mein Ansatz ein gut ein, wie ich Ich spare die Daten oder es funktioniert einfach nicht, weil dieser Ansatz schlecht ist? Wenn es ein guter Ansatz ist, dann sollte ich meinen Fehler woanders suchen.

+0

Können Sie ein Arbeitsblatt als Speicheroption verwenden und nicht immer auf Variablen verweisen? Natürlich könnte diese Vorgehensweise die Leistung um einen kleinen Betrag verringern, aber es würde Ihnen eine viel konsistentere Erfahrung in Bezug auf die gespeicherten Werte geben. * edit *: Bathsheba schlägt mich dazu :) – jonifen

+0

Hört sich an, als wäre dieses Code-Bit in einer Arbeitsmappe "A" und die Variablenwerte werden in einer anderen Arbeitsmappe "B" ohne diesen VBA-Code gespeichert. Ist es möglich, dass Ihre Arbeitsmappe "B" später ohne VBA der Arbeitsmappe "A" geöffnet wird und die Zelle mit der verschobenen Variable? Dann, wenn Sie die Arbeitsmappe "B" erneut öffnen, wurden einige andere Zellen mit anderen Werten an ihren Platz verschoben? –

Antwort

1

Alle Ihre Variablen werden ebenfalls auf Null zurückgesetzt, wenn im VBA-Editor auf "Reset" geklickt wird oder eine "End" -Anweisung erreicht wird. Es könnte auch andere Gelegenheiten geben, obwohl mir nichts einfällt. Sie schützen derzeit nur, dass die Arbeitsmappe geschlossen und erneut geöffnet wird.

So ist Ihr Ansatz spröde.

Sie können die globalen Variablen vollständig entfernen, und immer beziehen Sie sich auf das Arbeitsblatt für die Einstellung und Abruf ihrer Werte.

0

Sie können Ihr Konzept mit ein paar Helfer verbessern Routinen

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 

Dann in Ihrem Code verwenden LoadVariables wenn Sie die Daten verwenden müssen (in der Regel am Anfang, was auch immer Unter es braucht) und SaveVariables, wenn Sie habe die Werte aktualisiert. Offensichtlich erfordert dies mehr Fehlerbehandlung, etc.

Das Laden der gesamten Variablen, die in einem einzigen Array gesetzt sind, macht es auch einfacher, den Code zu pflegen (weniger Tippfehler) und Iterationen zu behandeln, falls nötig.

Verwandte Themen