Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema Userform
BildScreenshot zu Userform Userform-Seite mit Beispielarbeitsmappe aufrufen

Alle blaetter / WorkSheets per vba aktualisieren

Betrifft: Alle blaetter / WorkSheets per vba aktualisieren von: Andreas
Geschrieben am: 11.08.2014 14:21:22

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

  

Betrifft: AW: Alle blaetter / WorkSheets per vba aktualisieren von: Werner
Geschrieben am: 11.08.2014 14:45:28

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


  

Betrifft: AW: Alle blaetter / WorkSheets per vba aktualisieren von: Andreas
Geschrieben am: 11.08.2014 14:57:22

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.


  

Betrifft: AW: Alle blaetter / WorkSheets per vba aktualisieren von: Andreas
Geschrieben am: 11.08.2014 15:10:47

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 < .Range("DataGoal").Row Then
            rngGoalData.Offset(.Range("DataGoal").Row - 1, 0).Clear
        Else
            .Range("DataGoal").CurrentRegion.Clear
        End If

        Range("DataStart").CurrentRegion.AdvancedFilter _
                Action:=xlFilterCopy, _
                CriteriaRange:=.Range(.Range("DataCrit").Row & ":" & lngRows), _
                CopyToRange:=.Range("DataGoal"), _
                Unique:=False
    End With
ErrorHandler:
    Application.EnableEvents = True
    Application.ScreenUpdating = True
End Sub

Public Sub ReSharpen()
   Application.EnableEvents = True
   Application.ScreenUpdating = True
End Sub

Und wenn das so ist, wie kann ich aktualisieren, ohne jedes Blatt einzeln anklicken zu muessen?


  

Betrifft: AW: Alle blaetter / WorkSheets per vba aktualisieren von: Werner
Geschrieben am: 11.08.2014 15:14:19

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


  

Betrifft: AW: Alle blaetter / WorkSheets per vba aktualisieren von: Andreas
Geschrieben am: 11.08.2014 15:20:43

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.


  

Betrifft: with ist überflüssig von: Matthias L
Geschrieben am: 11.08.2014 16:16:36

Hi

Für was soll denn das
With worksheets(x)
gut sein?

Gruß Matthias


  

Betrifft: AW: with ist überflüssig von: Andreas
Geschrieben am: 11.08.2014 16:48:00

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.


  

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

:-?


  

Betrifft: AW: Dafür gibt's doch Tasten...!? Gruß owT von: Andreas
Geschrieben am: 11.08.2014 18:06:05

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?


  

Betrifft: klar gibts dafür Tasten...! von: Matthias L
Geschrieben am: 11.08.2014 18:22:30

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


  

Betrifft: AW: klar gibts dafür Tasten...! von: Andreas
Geschrieben am: 11.08.2014 18:44:24

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


  

Betrifft: ...und ich bezog mich darauf, ... von: Luc:-?
Geschrieben am: 11.08.2014 18:24:06

…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 :-?


  

Betrifft: AW: ...und ich bezog mich darauf, ... von: Andreas
Geschrieben am: 11.08.2014 18:49:45

Ich werde versuchen, mich in die Klassen und ihren Prozeduren einzuarbeiten.

Danke


  

Betrifft: AW: Dafür gibt's doch Tasten...!? Gruß owT von: Werner
Geschrieben am: 11.08.2014 18:47:31

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


  

Betrifft: AW: Dafür gibt's doch Tasten...!? Gruß owT von: Werner
Geschrieben am: 11.08.2014 18:55:27

Andreas,

oder anstatt

worksheets(x).calculate

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

Werner


  

Betrifft: Nochmal ... warum With ? von: Matthias L
Geschrieben am: 11.08.2014 20:31:14

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


 

Beiträge aus den Excel-Beispielen zum Thema "Alle blaetter / WorkSheets per vba aktualisieren"