Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Alle blaetter / WorkSheets per vba aktualisieren

Alle blaetter / WorkSheets per vba aktualisieren
11.08.2014 14:21:22
Andreas
Hallo,
So nachdem das mit dem Drucken super klappt, habe ich hierzu noch einmal eine andere Frage.
Ich habe diese Arbeitsmappe gefunden die genau macht, was ich will.
https://www.herber.de/bbs/user/92016.xls
Ich wuerde hier nun gerne alle WorkSheets ausser 'Daten' ausblenden.
Da ich nun die ausgeblendeten Sheet nicht auswaehlen kann, werden diese nicht aktualisiert.
Es werden sehr viele Blaetter und ich wuerde die gerne mit einem Knopf alle aktualisieren.
Ich habe mit einem Button und Makro bei eingeblendeten Sheets das hier versucht
Dim sh As Worksheet
For Each sh In ActiveWorkbook.WorkSheets
sh.Calculate
Next sh
Leider funktioniert das nicht.
Gibt es eine Moeglichkeit, alle x Sheets aufeinmal per vba zu aktualisieren?
Und wie wuerde das funktionieren, wenn diese sheets ausgeblendet sind? Erst einblenden lassen und dann sofort wieder ausblenden, oder funktioniert das auch wenn ausgeblendet ist?
Ich hoffe ich druecke mich klar aus.
Noch einmal vielen lieben Dank fuer alle Tipps und Hilfe,
Andreas

Anzeige

16
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Alle blaetter / WorkSheets per vba aktualisieren
11.08.2014 14:45:28
Werner
Hallo Andreas,
Versuch mal
dim sh as worksheet
for each sh in worksheets
with sh
sh.calculate
end with
next
in ein allgemeines Modul und auf den Button legen.
Gruß Werner

AW: Alle blaetter / WorkSheets per vba aktualisieren
11.08.2014 14:57:22
Andreas
Hallo Werner,
Danke fuer Deine Hilfe.
Ich habe den Code von dir in eine Button Funktion innerhalb einer UserForm und in ein Modul2 unter allgemein gelegt. Dieses wird auch durch einen Button direkt aus der Tabelle angesprochen.
Leider scheint es nicht zu funktionieren.
Ich hoffe, dass ich nicht falsch mache.

Anzeige
AW: Alle blaetter / WorkSheets per vba aktualisieren
11.08.2014 15:10:47
Andreas
Kann es sein, dass worksheet.calculate nicht funktioniert, weil die das Fuellen der Blaeter ueber Funktionen, welche in der Arbeitsmappe definiert sind, realisiert ist?
Code der Arbeitsmappe:

Option Explicit
Private Sub Workbook_SheetActivate(ByVal sh As Object)
If Range("DataStart").Parent.Name  sh.Name Then
Dim rngCrit As Range
On Error Resume Next
Set rngCrit = sh.Range("DataCrit")
On Error GoTo 0
If Not rngCrit Is Nothing Then
Filter sh
End If
End If
ErrorHandler:
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub
Private Sub Workbook_SheetChange(ByVal sh As Object, ByVal Target As Range)
If Range("DataStart").Parent.Name  sh.Name Then
Dim rngAct  As Range
Set rngAct = ActiveCell
On Error GoTo ErrorHandler
Set Target = Intersect(Target, sh.Range(sh.Range("DataCrit").Row & ":" & sh.Range(" _
DataGoal").Row - 1).EntireRow)
If Not Target Is Nothing Then
Filter sh
Application.GoTo rngAct
End If
End If
ErrorHandler:
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub
Private Sub Filter(sh As Object)
On Error GoTo ErrorHandler
Application.ScreenUpdating = False
Application.EnableEvents = False
Dim lngRows     As Long
Dim rngGoalData As Range
With sh
lngRows = .Range(.Range("DataCrit").Row & ":" & .Range("DataGoal").Row - 1). _
Find(What:="*", _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
Set rngGoalData = .Range("DataGoal").CurrentRegion
If rngGoalData(1, 1).Row 
Und wenn das so ist, wie kann ich aktualisieren, ohne jedes Blatt einzeln anklicken zu muessen?

Anzeige
AW: Alle blaetter / WorkSheets per vba aktualisieren
11.08.2014 15:14:19
Werner
Hallo Andreas,
versuch es mal mit woksheets.count
dim x as long
x = 1 to worksheets.count
With worksheets(x)
worksheets(x).calculate
end with
next
Werner

AW: Alle blaetter / WorkSheets per vba aktualisieren
11.08.2014 15:20:43
Andreas
Ich habe einen Syntaxfehler vom Compiler erhalten.

x = 1 to worksheets.count
Ich habe daraus dann

For x = 1 to worksheets.count
gemacht.
Leider ohne Erfolg.

Anzeige
with ist überflüssig
11.08.2014 16:16:36
Matthias
Hi
Für was soll denn das
With worksheets(x)
gut sein?
Gruß Matthias

AW: with ist überflüssig
11.08.2014 16:48:00
Andreas
Hallo Mathias,
ich habe leider keine Ahnung.
Ich versuche nur krampfhaft das Ereignis, welches beim Wechseln von einem zum anderen Blat ausgeloest wird, manuell auszuloesen.
Ich hatte die calculate (Methode?) versucht, aber das scheint nicht zu funktionieren, weil, wie ich denke, die Blaeter selber keine Formeln oder Funktionen haben.
Ich denke beim Wechseln zwischen den Arbeitsblaettern wird ein Event ausgeloest was zu der Aktualisierung fuehrt. Ich haette dieses Akualisieren jetyzt gerne auch manuell ausgeloest.
Ich weiss leider nur nicht weiter.

Anzeige
Dafür gibt's doch Tasten...!? Gruß owT
11.08.2014 16:52:25
Luc:-?
:-?

AW: Dafür gibt's doch Tasten...!? Gruß owT
11.08.2014 18:06:05
Andreas
Ich beziehe jetzt auf deinen Betreff Luc:-?
Wofuer gibt es Tasten, wo sind die und koennen die wirklich aus einer UserForm alle Sheets auf einmal aktualisieren?

klar gibts dafür Tasten...!
11.08.2014 18:22:30
Matthias
Hi
Wofuer gibt es Tasten
Na z.B. zum Aktualisieren die Taste F9, dadurch wird eine Neuberechnung ausgelöst.
Soll heißen wenn Du es manuell machen willst, irgend ein Blatt aktivieren (Event wäre hier Activate)
und F9 drücken.
Gruß Matthias

Anzeige
AW: klar gibts dafür Tasten...!
11.08.2014 18:44:24
Andreas
Das habe ich jetzt einmal probiert.
Meine Daten eingegeben, dann irgendein Blatt aktiviert und dann F9 gedrueckt.
Das Blatt welches aktiviert wird, bekommt schon vor F9 die aktualisierten Daten. Auch ohne F9.
Aber alle anderen Blaetter werden nicht aktualisiert.
Ausserdem kann man, wenn die Userform geoeffnet ist, keine Blaetter aktivieren. Und was soll dannn in der Userform F9 bewirken?
Ich kenne mich mit excel leider nicht so gut aus, denke aber ich werde versuchen herauszufinden welche Prozeduren ich ggf mit Parameter aufrufen muss, um mein Ziel zuerreichen.
Danke

Anzeige
...und ich bezog mich darauf, ...
11.08.2014 18:24:06
Luc:-?
…Andreas: ;-]
Zitat: Ich versuche nur krampfhaft das Ereignis, welches beim Wechseln von einem zum anderen Blat ausgeloest wird, manuell auszuloesen.
Übrigens, wenn du irgendeine EreignisProzedur aus einem anderen VBA-Pgm (nicht manuell!) heraus auslösen willst, musst du sie nur direkt aufrufen (mit vorangestelltem KlassenModulNamen., dabei evtl verlangte Parameter, die sonst das Ereignis bereitstellt, nicht vergessen)!
Gruß, Luc :-?

Anzeige
AW: ...und ich bezog mich darauf, ...
11.08.2014 18:49:45
Andreas
Ich werde versuchen, mich in die Klassen und ihren Prozeduren einzuarbeiten.
Danke

AW: Dafür gibt's doch Tasten...!? Gruß owT
11.08.2014 18:47:31
Werner
Hallo Andreas,
dann versuch mal die Blätter per Makro einzublenden, dann calculate und anschließend wieder ausblenden.
dim x as long
application.screenupdating = false
For x = 1 to worksheets.count
with worksheets(x)
worksheets(x).visible = true
worksheets(x).calculate
worksheets(x).visible = false
end with
next
application.screenupdating = true
worksheets("name des sichtbaren tabellenblattes").visible = true
Kann derzeit aber nichts testen, kein computer.
Werner

Anzeige
AW: Dafür gibt's doch Tasten...!? Gruß owT
11.08.2014 18:55:27
Werner
Andreas,
oder anstatt
worksheets(x).calculate

worksheets(x).activate
Falls Makros auf dem activate event der tabellenblätter liegen
Werner

Nochmal ... warum With ?
11.08.2014 20:31:14
Matthias
Hallo Werner
warum With, wenn Du es dann in Deinem Code doch nicht benutzt?
Wenn Du With benutzen willst dann bitte richtig!
For x = 1 to Worksheets.Count
With Worksheets(x)
.Visible = True
.Calculate
.Visible = False
End With
Next
Gruß Matthias
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Alle Arbeitsblätter in Excel per VBA aktualisieren


Schritt-für-Schritt-Anleitung

Um alle Arbeitsblätter in einer Excel-Arbeitsmappe mit VBA zu aktualisieren, kannst Du das folgende Makro verwenden. Dieses Makro aktualisiert auch ausgeblendete Blätter, indem es sie kurz einblendet, aktualisiert und dann wieder ausblendet.

Sub AlleBlätterAktualisieren()
    Dim x As Long
    Application.ScreenUpdating = False
    For x = 1 To Worksheets.Count
        With Worksheets(x)
            .Visible = True
            .Calculate
            .Visible = False
        End With
    Next x
    Application.ScreenUpdating = True
End Sub

Um dieses Makro zu verwenden, füge es in ein Modul innerhalb deiner VBA-Entwicklungsumgebung ein. Du kannst dann einen Button erstellen, um dieses Makro auszuführen, was den Prozess erheblich vereinfacht.


Häufige Fehler und Lösungen

  1. Fehler beim Ausführen des Makros:

    • Problem: Du erhältst möglicherweise einen Fehler, weil die Blätter nicht sichtbar sind.
    • Lösung: Stelle sicher, dass das Makro die Sichtbarkeit der Blätter korrekt ändert, wie im obigen Beispiel.
  2. Worksheet.Calculate funktioniert nicht:

    • Problem: Wenn Du die Methode Calculate aufrufst, könnte es sein, dass die Blätter keine Formeln enthalten.
    • Lösung: Aktiviere das entsprechende Blatt, um die Ereignisprozeduren auszulösen, falls diese notwendig sind.
  3. Syntaxfehler:

    • Problem: Ein häufiger Fehler ist die falsche Verwendung von Schleifen.
    • Lösung: Achte darauf, dass Du die Schleife korrekt schreibst, z.B. For x = 1 To Worksheets.Count.

Alternative Methoden

  1. Manuelles Aktualisieren mit F9: Du kannst alle Berechnungen in Excel auch manuell mit der Taste F9 auslösen. Dies aktualisiert jedoch nur das aktive Blatt und nicht die ausgeblendeten.

  2. Aktualisieren über das Ribbon: Im Ribbon von Excel kannst Du die Funktion "Alle aktualisieren" verwenden, um Daten in Pivot-Tabellen oder externen Datenquellen zu aktualisieren.

  3. Ein Button für alle Blätter: Du kannst einen Button in Excel hinzufügen, der das oben genannte Makro ausführt, um alle Blätter auf einmal zu aktualisieren.


Praktische Beispiele

  • Beispiel 1: Wenn Du ein Arbeitsblatt hast, das Daten aus einer externen Quelle zieht, kannst Du das Makro verwenden, um sicherzustellen, dass alle Blätter die neuesten Daten reflektieren.

  • Beispiel 2: In einem Dashboard mit mehreren Blättern kannst Du das Makro nutzen, um sicherzustellen, dass alle Grafiken und Daten aktuell sind. Füge einfach einen Button hinzu, um das Makro auszuführen.

Sub UpdateDashboard()
    Call AlleBlätterAktualisieren
End Sub

Tipps für Profis

  • Verwende Error Handling: Füge On Error Resume Next und On Error GoTo 0 hinzu, um Fehler während der Ausführung des Makros zu ignorieren.

  • Optimierung der Performance: Schalte Application.ScreenUpdating aus, um die Leistung zu verbessern, während das Makro läuft.

  • Versteckte Blätter: Überlege, ob Du wirklich alle Blätter aktualisieren musst, oder ob einige davon nicht in den Berechnungen benötigt werden, um die Effizienz zu steigern.


FAQ: Häufige Fragen

1. Wie kann ich das Makro ausführen? Du kannst das Makro aus der VBA-Entwicklungsumgebung oder über einen hinzugefügten Button in Deiner Arbeitsmappe ausführen.

2. Was passiert, wenn ich F9 drücke? F9 aktualisiert die Berechnungen im aktiven Blatt, aber nicht in allen Blättern. Um alle Blätter zu aktualisieren, musst Du das Makro verwenden.

3. Funktioniert das Makro in allen Excel-Versionen? Ja, das Makro sollte in den meisten modernen Excel-Versionen funktionieren, die VBA unterstützen. Achte darauf, dass Du die Makros in den Excel-Einstellungen aktivierst.

4. Kann ich das Makro anpassen? Ja, Du kannst das Makro anpassen, um spezifische Blätter auszuschließen oder nur bestimmte Berechnungen auszuführen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige