Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1872to1876
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Berechnen bestimmer Tabellenblätter

Berechnen bestimmer Tabellenblätter
09.03.2022 13:04:22
Steve
Hallo zusammen,
ich bin gerade ein bisschen verzweifelt, habe folgendes Problem:
Berechnungen in meiner Arbeitsmappe sind für einzelne Tabellenblätter deaktiviert. (Automatische Berechnung hier macht alles zu langsam)
DieseArbeitsmappe

Private Sub Workbook_Open()
Me.Worksheets("Übersicht Produktionsplan").EnableCalculation = False
Me.Worksheets("Stahl 1").EnableCalculation = False
Me.Worksheets("Stahl 2").EnableCalculation = False
Me.Worksheets("1000 Alu").EnableCalculation = False
Me.Worksheets("GS 650").EnableCalculation = False
Me.Worksheets("LTC-20").EnableCalculation = False
Me.Worksheets("LTC-35").EnableCalculation = False
Me.Worksheets("Info Beschichtung").EnableCalculation = False
Me.Worksheets("Vorlage").EnableCalculation = False
End Sub
In den relevanten Arbeitsmappen gibt es Command Buttons, die das jeweilige Blatt aktualisieren, z.B.:

Private Sub Aktual_Stahl2_Click()
Me.EnableCalculation = True
Do
DoEvents
Loop Until Application.CalculationState = xlDone
Me.EnableCalculation = False
End Sub
Diese funktionieren in der jeweiligen Mappe einwandfrei.
Jetzt brauche ich in der Mappe Aufträge einen Button, der die Mappen Stahl 1, Stahl 2, 1000 Alu, GS 650, LTC-20 und LTC-35 nacheinander aktualisiert.
Ich habe hier schon vieles ausprobiert und nichts davon funktioniert so wie es soll. (Call, Calculate, Schleife mit o.g. Makro etc.) Ich bräuchte jetzt eigentlich einen Code für den Button in Aufträge, der die anderen Mappen aktualisiert.
Vielen Dank für eure Zeit!
Gruß
Steve

18
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Mappen, Blätter, was jetzt?
09.03.2022 13:23:14
Pierre

Sub Aktualisieren()
Dim sh As Worksheet
For Each sh In ActiveWorkbook.Sheets
sh.Calculate
Next sh
End Sub
Quelle: http://www.office-loesung.de/ftopic470673_0_0_asc.php
Evtl. noch mit

Application.Calculate = xlAutomatic
am Anfang und

Application.Calculate = xlManual
am Ende.
AW: Mappen, Blätter, was jetzt?
09.03.2022 14:02:27
Steve
Hallo Pierre,
"Diese Arbeitsmappe" soll nur den Standort der angefügten Definitionen im VBA Editor zeigen.
Alle anderen "Mappen" bitte durch "Blätter" ersetzten, da habe ich mich sehr unklar ausgedrückt.
Allerdings habe ich deine Lösung im Vorfeld schon ausprobiert und leider tut sich da auf allen relevanten Blättern gar nichts. Auch geht die Lösung nicht wirklich auf meine Fragestellung ein, ich möchte nämlich nicht alle Blätter berechnen, sondern nur die genannten.
Anscheinend funktioniert das so nicht mit den von mir genannten Definitionen für die gesamte Arbeitsmappe? s.o. In den Excel Optionen steht die Arbeitsmappenberechnung auf "Automatisch", das nur am Rande.
Die einzelnen Blätter werden mit dem Code oben aktualisiert, wenn sie aktiv sind. Ich habe auch schon versucht die Arbeitsblätter nacheinander zu aktivieren und dann mit dem Code, der eigentlich im einzelnen Blatt funktioniert zu aktualisieren. Aus irgend einem Grund klappt das aber auch nicht.
Wenn ich deine Variante mit

Application.Calculate = xlAutomatic
ausprobiere bekomme ich einen "Fehler beim Kompilieren: Function oder Variable erwartet"

.Calculate =
ist dabei markiert.
Gruß
Steve
Anzeige
AW: Berechnen bestimmer Tabellenblätter
09.03.2022 13:40:45
Rudi
Hallo,

Sub calc()
Dim ws As Worksheet
For Each ws In Worksheets(Split("Stahl 1,Stahl 2,1000 Alu,GS 650,LTC-20,LTC-35", ","))
ws.Calculate
Next ws
End Sub
Gruß
Rudi
AW: Berechnen bestimmer Tabellenblätter
09.03.2022 14:09:42
Steve
Hallo Rudi,
vielen Dank für deinen Ansatz. Leider tut sich in den Tabellenblättern gar nichts. Das Ganze geht auch einfach irgendwie viel zu schnell. Sobald ich den Button klicke ist die Berechnung auch schon fertig. Das dauert mit der eingangs beschriebenen Methode im einzelnen Blatt schon länger. Kann es sein, dass

ws.Calculate
hier einfach nichts tut?
Danke trotzdem für deine Zeit
Gruß
Steve
Anzeige
AW: Berechnen bestimmer Tabellenblätter
09.03.2022 14:14:38
Steve
P.S. Muss ich mit meinen Definitionen für diese Arbeitsmappe nicht sowas, wie

Me.Worksheets("Stahl 1").EnableCalculation = True
verwenden? und dann wieder rücksetzen? Leider habe ich von VBA so gut wie keine Ahnung, und dass was ich hier schreibe habe ich auch schon probiert und es funktioniert so wie ich es geschrieben hatte auch nicht..
AW: Berechnen bestimmer Tabellenblätter
09.03.2022 14:29:11
Rudi
dann mit meiner Schleife und deinem Code:

Sub calc()
Dim ws As Worksheet
For Each ws In Worksheets(Split("Stahl 1,Stahl 2,1000 Alu,GS 650,LTC-20,LTC-35", ","))
ws.EnableCalculation = True
Do
DoEvents
Loop Until Application.CalculationState = xlDone
ws.EnableCalculation = False
Next ws
End Sub
Gruß
Rudi
Anzeige
AW: Berechnen bestimmer Tabellenblätter
09.03.2022 15:30:00
Yal
hallo,
reicht es zu sagen "EnbleCalculation", sodass die Berechnung stattfindet?
Ist es nicht eher

Sub calc()
Dim ws As String
For Each ws In Array("Stahl 1", "Stahl 2", "1000 Alu", "GS 650", "LTC-20", "LTC-35")
With Worksheets(ws)
.EnableCalculation = True
.Calculate
.EnableCalculation = False
End With
Next ws
End Sub
?
VG
Yal
AW: Berechnen bestimmer Tabellenblätter
09.03.2022 16:05:32
Steve
Hallo Rudi,
der Code funktioniert grundsätzlich so, wie er soll. Ich hatte jetzt allerdings das Problem, dass der Code auch in dem Blatt, in dem ich ihn ausführe, also in "Aufträge" damit die Berechnungen irgendwie auf "Aus" gestellt hat. Habe es noch folgendermaßen angepasst:

Sub Kap_aktual_Click()
Dim ws As Worksheet
For Each ws In Worksheets(Split("Stahl 1,Stahl 2,1000 Alu,GS 650,LTC-20,LTC-35", ","))
ws.EnableCalculation = True
Do
DoEvents
Loop Until Application.CalculationState = xlDone
ws.EnableCalculation = False
Next ws
Me.EnableCalculation = True
End Sub
Die Zeile vor dem End Sub aktiviert mir dann anscheinend wieder mein Blatt "Aufträge" in dem ich das Makro ausführe.
Danke für die Hilfe!
Gruß
Steve
Anzeige
AW: Berechnen bestimmer Tabellenblätter
09.03.2022 18:09:09
Yal
Hallo Steve,
nicht dass bei Dir ein falsches Verständnis sich einnistet:
"Die Zeile vor dem End Sub aktiviert mir dann anscheinend wieder mein Blatt "Aufträge" in dem ich das Makro ausführe."
=> das funktioniert, weil dein Code in Codepane vom Blatt "Aufträge" liegt und somit "Me" das Blatt "Aufträge" darstellt.
Jedoch in der Auflistung ist nirgendwo das Blatt "Aufträge" aufgelistet, daher wird die Berechnung irgendwo anders ausgeschaltet.
Solltest Du eine selektive Wiedereinschaltung der Blätter, kannst Du so verfahren (Du verstehst inzwischen wie Split funktioniert, wenn icht Crusor drauf und F1 drücken):

Sub calc()
Dim ws As String
Dim E
For Each ws In Array("Stahl 1;aus", "Stahl 2;aus", "1000 Alu;aus", "GS 650;aus", "LTC-20;aus", "LTC-35;aus", "Aufträge;an")
E = Split(ws, ";")
With Worksheets(E(0))
.EnableCalculation = True
Do
DoEvents
Loop Until Application.CalculationState = xlDone
.EnableCalculation = CBool(E(1)  "aus")
End With
Next ws
End Sub
Lass den Code in Schritt-Modus(F8) beim offenen Lokalfenster (Ansicht, Lokalfenster), um zu sehen, welche Wert die Variable annehmen.
VG
Yal
Anzeige
AW: Berechnen bestimmer Tabellenblätter
10.03.2022 09:02:51
Steve
Guten Morgen Yal,
das wäre sicherlich interessant zu wissen, wo die Berechnung in diesem Blatt ausgeschaltet wird.
Beim lesen der Online Hilfe zu Split muss ich gestehen, dass ich noch nicht wirklich verstehe was z.B. ein nullbasiertes eindimensionales Array ist. Ich denke dazu habe ich grundsätzlich einfach zu wenig Programmierkenntnisse.
Dein Makro gibt mir an der Stelle

For Each ws In Array("Stahl 1;aus", "Stahl 2;aus", "1000 Alu;aus", "GS 650;aus", "LTC-20;aus", "LTC-35;aus", "Aufträge;an")
erstmal eine Fehlermeldung aus "Steuervariable für For Each muß vom Typ Variant oder Object sein." (ws markiert)
Vielen Dank fürs eindenken in die Thematik
Gruß
Steve
Anzeige
AW: Berechnen bestimmer Tabellenblätter
10.03.2022 11:32:32
Yal
andere

'Dim ws As String
'zu
Dim ws As Variant
Ein-Dimensional: nur ein Zeile oder nur eine Splate, 1-D, nur x
2-Dimensional: mehrere Zeilen und mehrere Spalten, also 2-D: x, y
3-Dimensional: 3-D, also x, y, z
usw.
Nullbasiert: in Programmiersprache fangen alle Auflistung mit null an: ein Array "X" mit 2 Elemente hat 2 Platzhalter X(0) und X(1). Der Versuch X(2) zu lesen verursacht einen Fehler ("Out of range"). Weil aber das gesamt menschenfreundlich sein soll, sind auch viele Sonderfälle, wo es von 1 bis letzte. Also "eins"-basiert.
Arr = Split ("a;b;c", ";")
ergibt eine eindimesionale, nullbasierte Array mit 3 Elemente:
Arr(0) = "a"
Arr(1) = "b"
Arr(2) = "c"
VG
Yal
Anzeige
AW: Berechnen bestimmer Tabellenblätter
10.03.2022 12:33:52
Steve
Jetzt habe ich auf die falsche Nachricht geantwortet. Du findest sie unterhalb meiner letzten Nachricht.
AW: Berechnen bestimmer Tabellenblätter
10.03.2022 12:31:32
Steve
Hallo Yal,
funktioniert so und es ist interessant zu sehen, was eigentlich passiert im geschriebenen Code. Vielen Dank für die wertvollen Hinweise :) Und natürlich auch für diese Sicherheit, dass meine Blätter auch so funktionierenm, wie sie sollen.
Und Yal, ich habe noch ein weiteres Problem, 3 Threads über diesem... Darauf antwortet leider seit gestern niemand, vielleicht hast du Zeit dir das kurz anzuschauen?
Vielen vielen Dank wieder mal :)
Gruß Steve
AW: Berechnen bestimmer Tabellenblätter
10.03.2022 12:33:54
onur
Und wieso antwortest DU nicht, wenn man dir was schreibt?
Anzeige
AW: Berechnen bestimmer Tabellenblätter
10.03.2022 13:55:19
Steve
Hallo Onur,
ich hatte Pierre schon geantwortet, dass es bei mir mit der Methode, die du vorgeschlagen hast, nicht funktioniert hat meine Blätter zu berechnen.
Das war nicht persönlich, ich habe angenommen du hast das mitbekommen.
Gruß
Steve
AW: Berechnen bestimmer Tabellenblätter
10.03.2022 13:59:24
onur
Warum soll ich lesen, was du Anderen schreibst?
AW: Berechnen bestimmer Tabellenblätter
10.03.2022 15:11:46
Steve
Hast du offensichtlich getan als du mich gefragt hast, warum ich aber DIR nicht antworte.
Entschuldige bitte, dass ich nicht auf deine Hilfe eingegangen bin.
AW: Berechnen bestimmer Tabellenblätter
09.03.2022 19:58:19
onur
Wenn du ein Blatt, dessen autom. Berechnungen ausgeschaltet sind, berechnen lassen willst,, brauchst du doch nur

Sheets("XY").Calculate
zu schreiben, statt die Berechnungen einzuschalten, zu warten, bis alles berechnet ist und dann wieder auszuschalten.
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige