VBA: Tab.blätter während VBA-Prozess stilllegen?

Bild

Betrifft: VBA: Tab.blätter während VBA-Prozess stilllegen?
von: Joerschi
Geschrieben am: 22.08.2015 21:21:54

Hallo liebes Forum,
eine allgemeine Frage zu VBA-Prozessen:
Ist es möglich, bei der Abarbeitung eines VBA-Prozesses in dessen Code zu verankern, dass bestimmte Tabellenblätter NICHT mit berechnet werden sollen (bzw. ruhen)?
Wenn ja, wie?
Grund hierfür ist, dass in dem Dokument sehr rechenintensive Tabellenblätter drin sind, die aber mit den Berechnungen des VBA-Prozesses nichts zu schaffen haben (also die Berechnungen in diesen Tab.blättern ruhen können).
Die würde ich gern während des Prozesses "stillegen"/deaktivieren.
Viele Grüße
Joerschi

Bild

Betrifft: VBA: Tab.blätter während VBA-Prozess stilllegen?
von: Nepumuk
Geschrieben am: 22.08.2015 21:54:13
Hallo,
über die EnableCalculation - Eigenschaft ist das möglich.

Public Sub Beispiel()
    
    Dim avntArray As Variant, iavntItem As Variant
    
    avntArray = Array("Tabelle1", "Tabelle2", "Tabelle3")
    
    For Each iavntItem In avntArray
        Worksheets(iavntItem).EnableCalculation = False
    Next
    
    'Dein Code
    
    For Each iavntItem In avntArray
        Worksheets(iavntItem).EnableCalculation = True
    Next
End Sub

Gruß
Nepumuk

Bild

Betrifft: AW: VBA: Tab.blätter während VBA-Prozess stilllegen?
von: Joerschi
Geschrieben am: 22.08.2015 22:04:01
Dank Dir Nepumuk,
da ich ein absoluter Anfänger in VBA bin, nochmal als Nachfrage:
So sieht aktuell mein Code aus
(der Prozess läuft mir auch zu langsam und vielleicht kann man den optimieren, aber die Nachfrage ich wohl ein anderes Mal als Thread eröffnen):

Sub Test123_1()
  Application.ScreenUpdating = False
  With Sheets("aktWo_Wahl")
    For i = .Cells(11, 276) To .Cells(11, 277)
      .Cells(12, 276) = i
      .Range("aid1:aih3000").Copy
      With Sheets("xyz")
        .Cells(2, Columns.Count).End(xlToLeft) _
          .Offset(-1, IIf(.Range("a1") = "", 0, 6)).PasteSpecial xlPasteValues
          Application.CutCopyMode = False
      End With
    Next i
  End With
  
  Application.Goto Sheets("xyz").Range("A1"), True
End Sub
In Deinen Vorschlag eingebunden wäre dies dann so:
Public Sub Beispiel()
    
    Dim avntArray As Variant, iavntItem As Variant
    
    avntArray = Array("Tabelle1", "Tabelle2", "Tabelle3")
    
    For Each iavntItem In avntArray
        Worksheets(iavntItem).EnableCalculation = False
    Next
    
    Sub Test123_1()
  Application.ScreenUpdating = False
  With Sheets("aktWo_Wahl")
    For i = .Cells(11, 276) To .Cells(11, 277)
      .Cells(12, 276) = i
      .Range("aid1:aih3000").Copy
      With Sheets("xyz")
        .Cells(2, Columns.Count).End(xlToLeft) _
          .Offset(-1, IIf(.Range("a1") = "", 0, 6)).PasteSpecial xlPasteValues
          Application.CutCopyMode = False
      End With
    Next i
  End With
  
  Application.Goto Sheets("xyz").Range("A1"), True
End Sub
    
    For Each iavntItem In avntArray
        Worksheets(iavntItem).EnableCalculation = True
    Next
End Sub
Richtig?
Danke vorab und liebe Grüße
Joerschi

Bild

Betrifft: VBA: Tab.blätter während VBA-Prozess stilllegen?
von: Nepumuk
Geschrieben am: 23.08.2015 06:32:23
Hallo,
so sollte es funktionieren:

Option Explicit

Public Sub Test123_1()
    
    Dim avntArray As Variant, iavntItem As Variant
    Dim i As Long
    
    avntArray = Array("Tabelle1", "Tabelle2", "Tabelle3") 'Anpassen !!!
    
    For Each iavntItem In avntArray
        Worksheets(iavntItem).EnableCalculation = False
    Next
    
    Application.ScreenUpdating = False
    With Sheets("aktWo_Wahl")
        For i = .Cells(11, 276) To .Cells(11, 277)
            .Cells(12, 276) = i
            .Range("aid1:aih3000").Copy
            With Sheets("xyz")
                .Cells(2, Columns.Count).End(xlToLeft) _
                    .Offset(-1, IIf(.Range("a1") = "", 0, 6)).PasteSpecial xlPasteValues
                
            End With
        Next i
    End With
    
    For Each iavntItem In avntArray
        Worksheets(iavntItem).EnableCalculation = True
    Next
    
    With Application
        .CutCopyMode = False
        .Goto Sheets("xyz").Range("A1"), True
        .ScreenUpdating = True
    End With
End Sub

Die Namen der Tabellen die nicht berechnet werden sollen musst du natürlich anpassen.
Gruß
Nepumuk

Bild

Betrifft: AW: VBA: Tab.blätter während VBA-Prozess stilllegen?
von: Joerschi
Geschrieben am: 23.08.2015 09:23:17
Vielen Dank Nepumuk,
Nur noch einmal zum Verständnis: Die Formeln der stillgelegten Blätter werden zwar nicht aktualisiert, aber die bisher berechneten Werte darin bleiben als Berechnungsgrundlage anderer Bezüge erhalten, richtig?
Viele Grüße
Joerschi

Bild

Betrifft: VBA: Tab.blätter während VBA-Prozess stilllegen?
von: Nepumuk
Geschrieben am: 23.08.2015 11:33:05
Hallo,
ja richtig.
Gruß
Nepumuk

 Bild

Beiträge aus den Excel-Beispielen zum Thema "VBA: Tab.blätter während VBA-Prozess stilllegen?"