Frage von AlexandraJun16, 40

VBA - Stetig ändernde Werte berechnen und abspeichern (Change.Event)?

Hallo zusammen,

leider bin ich totaler Anfänger in Sachen VBA und habe folgendes Problem, bei dem ich hoffe Ihr könnt mir helfen :(.

Per Klick auf einen Button werden die Zellen D9 und E9 1.000 Mal berechnet. Die 1.000 errechneten verschiedenen Werte in Zelle D9 sollen dann in D95:D1094 und die errechneten Werte in Zelle E9 in E95:E1094 abgespeichert werden. Durch erneutes Klicken auf den Knopf, wird alles wieder 1.000 Mal berechnet und die Werte in D95:D1094 sowie E95:E1094 überschrieben.

Ich hoffe Ihr könnt mir helfen und bedanke mich vielmals für Eure Mühe.

Liebe Grüße Alexandra

Antwort
von Suboptimierer, 30

So wie ich das sehe, hat das nichts mit dem Change-Event zutun, da das auslösende Ereignis der Klick auf die Schaltfläche ist.

In D9 und E9 stehen wahrscheinlich Excelformeln. Du greifst auf den Wert der Formeln mit Value zu Für D95:E1094 reicht eine einfache For-Schleife.

For i=95 to 1094
  Call BerechneD9();
  Call BerechneE9();
  Range("D" & i & ":E" & i ).Value = Range("D9:E9").Value
Next

(ungetestet)

Kommentar von AlexandraJun16 ,

Hallo Suboptimierer,

danke für die schnelle Antwort. Nun habe ich einen Code, der beim Drücken auf den Button die Werte aus D9 und E9 in die Zellen D95:D1094 bzw. E95:E1094 speichert. Der Code sieht wie folgt aus:

Private Sub CommandButton1_Click() 

BerechnungEintragen
For i = 1 To 1000
Application.CalculateFull
Next i
End Sub

Sub BerechnungEintragen()
Dim lngZeile As Long
Dim lngZaehler As Long
lngZeile = 95
For lngZaehler = 1 To 1000
Range("D9").Select
Selection.Copy
ActiveWindow.Panes(3).Activate
Range("D95:D1094").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Cells(lngZeile, 4) = Range("D9")
Cells(lngZeile, 5) = Range("E9")
lngZeile = lngZeile + 1
Next lngZaehler
End Sub

Problem ist, dass wie gesagt der Wert in D9 und E9 sich mit jeder Berechnung ändert und somit durch Drücken auf den Button 1.000 Berechnungen ausgelöst, die zu 1.000 verschiedenen Werten in D9 und E9 führen. Leider werden diese verschiedenen Werte nicht in D95:D1094 bzw. E95:E1094 gespeichert. Stattdessen ist in D95:D1094 1.000 Mal ein Wert und in E95:E1094 1.000 Mal ein anderer Wert gespeichert, so dass ich nicht weiß, was in den anderen Berechnungen für Werte generiert wurden :(.

Ich hoffe wirklich sehr, dass mir jemand weiterhelfen kann und bedanke mich vielmals für Eure Mühe.

Danke und viele Grüße,

Alexandra

Kommentar von Suboptimierer ,

Du iterierst zweimal. Einmal würde genügen. BerechnungEintragen muss in der gleichen Schleife nach der Berechnung erfolgen. Du kannst das nicht (so einfach) separieren.

Kommentar von Suboptimierer ,

Vorschlag: 

Private Sub CommandButton1_Click() 
  BerechnungEintragen 
End Sub 
Sub BerechnungEintragen() 
Dim lngZeile As Long 
Dim lngZaehler As Long 
lngZeile = 95 
For lngZaehler = 1 To 1000  Application.CalculateFull '...
Kommentar von AlexandraJun16 ,

Hallo Suboptimierer,

anscheinend bin ich zu blöd :(. Ich habe nun folgenden folgenden Code eingegeben:

Private Sub CommandButton1_Click()
Berechne
End Sub

Public Sub Berechne()
Dim lngZeile As Long
Dim lngZaehler As Long
lngZeile = 95
For lngZaehler = 1 To 1000
Application.CalculateFull
Range("D9").Select
Selection.Copy
ActiveWindow.Panes(3).Activate
Range("D95:D1094").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Cells(lngZeile, 4) = Range("D9")
Cells(lngZeile, 5) = Range("E9")
lngZeile = lngZeile + 1
Next lngZaehler
End Sub

Aber wie zuvor auch, schreibt er in D95:D1094 1.000 Mal einen identischen Wert und in E95:E1094 1.000 Mal ein anderen identischen Wert. Da jedoch die Zellen D9 und E9 jeweils 1.000 Mal berechnet werden, müssten somit in D95:D1094 1.000 verschiedene Werte stehen und in E95:E1094 1.000 verschiedene Werte.

Danke für deine Mühe :(

Kommentar von Suboptimierer ,

Du fügst den Inhalt von D9 in D95:D1094 ein. Du willst aber nur die nächste Zelle befüllen.

Ich rate dir, dich an meine Ursprungsantwort zu halten. 

Range("D" & lngZeile).Value = Range("D9").Value 

Das automatische Neuberechnen musst du in Excel deaktiviert haben.

Keine passende Antwort gefunden?

Fragen Sie die Community

Weitere Fragen mit Antworten