Aktualisiert nicht innerhalb Schleife
08.04.2022 11:25:42
Cel
im Rahmen meiner Abschlussarbeit habe ich eine Excel Tabelle mit Makro erstellt, um für eine Liste an Dachflächen berechnen zu können, wie viele PV Module auf das Dach passen und mit welchen Erträgen man im Jahresverlauf rechnen kann.
Die Berechnung einer Dachfläche befindet sich in den verschiedenen Tabellenblättern in der Datei.
Damit für jede Dachfläche die Berechnung durchgeführt wird habe ich ein Makro erstellt. Dazu möchte ich noch sagen, ich habe vor der Arbeit noch nie mit VBA programmiert, somit bin ich hier ein Anfänger.
Das VBA Programm soll die Liste der Gebäudeinformationen durch gehen und jeweils in die Eingabe geben, dann soll der Ertrag berechnet werden und jenachdem ob es ein Flach oder ein Schrägdach ist soll der jeweilig mögliche Ertrag im Jahresverlauf in ein gemeinsames Tabellenblatt kopiert werden. Wenn weniger als drei Module auf das Dach passen, soll das Dach übersprungen werden und das nächste angeschaut werden.
Ich habe ein Quellcode mit dem das ganze problemlos funktioniert, allerdings braucht die Tabelle mehrere Stunden um zu berechnen, da ich die automatische Berechnung usw. nicht ausgeschaltet hatte. (Wie gesagt, Anfänger) (siehe Quellcode 1)
Nun habe ich das ganze versucht zu verbessern (Quellcode 2). Damit braucht die Berechnung bei 11.000 Dachflächen noch ca. 20 Minuten, was denke ich okay ist.
Allerdings habe ich hier das Problem, dass zwischendurch einfach die Berechnungen nicht aktualisiert werden, und ich verstehe nicht, wo es herkommt.
Ich habe ja die Neuberechnung in die For-Schleife gepackt,..
Teilweise stimmt hier also die erste Berechnung, aber die folgenden Dachflächen erhalten den gleichen Jahresverlauf an Ertrag, was nicht möglich ist.
Ich hoffe mein Problem ist klar geworden und dass mir jemand helfen kann :-)
Vielen Dank!
QUELLCODE 1
Sub Geb_ertrag()
Application.ScreenUpdating = False
''Gebäude Ids kopieren
Sheets("Gebäudeinformationen").Range("A:A").Copy
Sheets("Erträge je Gebäude").Range("A:A").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
'Berechnung der Anzahl der geeigneten Dachflächen
Anzahl_Flächen = Sheets("Gebäudeinformationen").Cells(Rows.Count, 1).End(xlUp).Row - 1
'Ausrichtung eingeben
Sheets("Gebäudeinformationen").Cells(2, 13).Copy
Sheets("Eingabe").Cells(10, 3).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
For i = 1 To Anzahl_Flächen
vorprüfung = Sheets("Gebäudeinformationen").Cells(i + 1, 14) * 0.75 / 1.676675
If vorprüfung 12 Then
GoTo Line1
ElseIf vorprüfung / 3 12 Then
Sheets("Ertrag").Range("I2:I8761").Copy
Sheets("Erträge je Gebäude").Cells(i + 1, 3).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=True
zeile = i + 1
spalte = "b"
cells_beginn = spalte & zeile
ERTRAG = Sheets("Ertrag").Range(cells_beginn)
Sheets("Ertrag").Cells(16, 13).Copy
Sheets("Erträge je Gebäude").Cells(i + 1, 8763).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Else
Sheets("Ertrag").Range("T2:T8761").Copy
Sheets("Erträge je Gebäude").Cells(i + 1, 3).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=True
zeile = i + 1
spalte = "b"
cells_beginn = spalte & zeile
ERTRAG = Sheets("Ertrag").Range(cells_beginn)
Sheets("Ertrag").Cells(16, 24).Copy
Sheets("Erträge je Gebäude").Cells(i + 1, 8763).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
End If
End If
Line1:
Next i
'Summenbildung
range_summe = "C" & Anzahl_Flächen + 2 & ":LXZ" & Anzahl_Flächen + 2
Sheets("Erträge je Gebäude").Range(range_summe).Copy
range_einfuegen = "h3:h" & Anzahl_Flächen + 2
Sheets("Ertrag Summe").Range(range_einfuegen).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=True
'Ertrag des Gebäudes Übertragen
Sheets("Erträge je Gebäude").Range("LYB2:LYB1695").Copy
Sheets("Ertrag Gebäude").Range("h2:h1695").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Application.ScreenUpdating = True
End Sub
QUELLCODE 2:
Sub Geb_ertrag()
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Application.DisplayStatusBar = False
ActiveSheet.DisplayPageBreaks = False
Application.EnableEvents = False
'Berechnung der Anzahl der geeigneten Dachflächen
Anzahl_Flächen = Sheets("Erträge je Gebäude").Cells(Rows.Count, 1).End(xlUp).Row - 1
'Gebäude-IDs kopieren
Sheets("Erträge je Gebäude").Range("A:A") = Sheets("Gebäudeinformationen").Range("A:A").Value
'Gebäude-Ausrichtung kopieren
Sheets("Erträge je Gebäude").Range("B:B") = Sheets("Gebäudeinformationen").Range("C:C").Value
For i = 1 To Anzahl_Flächen Step 1
vorprüfung = Sheets("Gebäudeinformationen").Cells(i + 1, 4) * 0.75 / 1.6
If vorprüfung 12 Then
GoTo Line1
ElseIf vorprüfung / 3 12 Then
Sheets("Ertrag").Range("I2:I8761").Copy
Sheets("Erträge je Gebäude").Cells(i + 1, 3).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=True
Sheets("Erträge je Gebäude").Cells(i + 1, 8763) = Sheets("Ertrag").Cells(16, 13).Value
Else
Sheets("Ertrag").Range("T2:T8761").Copy
Sheets("Erträge je Gebäude").Cells(i + 1, 3).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=True
Sheets("Erträge je Gebäude").Cells(i + 1, 8763) = Sheets("Ertrag").Cells(16, 24).Value
End If
End If
Line1:
Next i
Sheets("Erträge je Gebäude").Calculate
'Summenbildung
range_summe = "C" & Anzahl_Flächen + 2 & ":LXZ" & Anzahl_Flächen + 2
Sheets("Erträge je Gebäude").Range(range_summe).Copy
range_einfuegen = "b3:b" & Anzahl_Flächen + 2
Sheets("Ertrag Summe").Range(range_einfuegen).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=True
'Ertrag des Gebäudes Übertragen
For t = 2 To Anzahl_Flächen + 1 Step 1
range_gebäude = "b" & t
range_kopieren = "LYB" & t
Sheets("Ertrag Gebäude").Range(range_gebäude) = Sheets("Erträge je Gebäude").Range(range_kopieren).Value
Next t
Application.ScreenUpdating = True
Application.Calculation = xlAutomatic
Application.DisplayStatusBar = True
ActiveSheet.DisplayPageBreaks = True
Application.EnableEvents = True
End Sub