Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: VBA Private Sub Workbook_Open() optimieren

VBA Private Sub Workbook_Open() optimieren
Matz
Hallo zusammen
ich habe mir hier im Forum aus mehreren VBA Fragementen etwas zusammengebastelt.
Es funktioniert zwar, ich bin mir aber sicher, dass das ganze nicht optimal gebaut ist:
Option Explicit

Private Sub Workbook_Open()
Application.ScreenUpdating = False
Application.Calculation = xlManual
Application.DisplayFullScreen = True
Application.DisplayFormulaBar = False
Application.CalculateBeforeSave = False
Dim wb As Workbook, ws As Worksheet
Set wb = ThisWorkbook
For Each ws In wb.Worksheets
If ws.Type = xlWorksheet Then
If ws.ProtectContents Then
ws.Unprotect Password:=""
End If
ws.Protect Password:="", _
Contents:=True, _
AllowFiltering:=True, _
UserInterfaceOnly:=True
End If
Next ws
Set ws = Nothing
Set wb = Nothing
ActiveWindow.DisplayGridlines = False
ActiveWindow.DisplayHeadings = False
Call SetCommandbar
Application.CalculateBeforeSave = False
End Sub

Was der Code eigentlich machen soll:
- Beim Öffnen der Arbeitsmappe, sollen alle Tabellenblätter geschützt werden, ich möchte aber Makros noch laufen lassen können.
- Alle Symbolleisten, Gitternetzlinien, Überschriften usw. sollen verschwinden und ich möchte im Vollbild arbeiten.
- Die Berechnung soll auf manuell geschaltet werden, so dass vom ersten Moment an nur gerechnet wird, wenn ich das manuell ausführe.
- Auch beim schliessen ,soll die Tabelle nicht automatisch neu berechnet werden.
- Ich möchte nicht sehen, was beim Makroausführen (oder auch beim Blattschützen) alles im Hintergrund passiert, also "Screenupdating" ausschalten.
Es wäre superlieb, wenn sich einer von Euch Cracks den Code mal anschauen würde und mir zeigen würde, was ich richtig habe, was falsch ist und wie es besser sein würde.
Vielen Dank
Viele Grüsse
Matz
Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: VBA Private Sub Workbook_Open() optimieren
14.09.2011 16:04:15
Rudi
Hallo,

Private Sub Workbook_Open()
Dim ws As Worksheet
With Application
.ScreenUpdating = False
.Calculation = xlManual
.DisplayFullScreen = True
.DisplayFormulaBar = False
.CalculateBeforeSave = False
End With
For Each ws In Me.Worksheets
ws.Protect Contents:=True, _
AllowFiltering:=True, _
UserInterfaceOnly:=True
Next ws
With ActiveWindow
.DisplayGridlines = False
.DisplayHeadings = False
End With
Call SetCommandbar
End Sub

Aber zumindest was die Application betrifft, solltest du beim Schließen der Mappe wieder zurücksetzen. Sonst gilt das für alle Mappen.
Gruß
Rudi
Anzeige
Perfekt, vielen Dank Rudi!
15.09.2011 17:12:25
Matz
Gruss
Matz
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

VBA Private Sub Workbook_Open() optimieren


Schritt-für-Schritt-Anleitung

  1. Öffne den VBA-Editor: Drücke ALT + F11, um den Visual Basic for Applications (VBA) Editor zu öffnen.

  2. Wähle das Workbook: Im Projektfenster auf der linken Seite, doppelklicke auf den entsprechenden Workbook-Namen.

  3. Füge den Code ein: Kopiere und füge den folgenden Code in das Modul ein:

    Private Sub Workbook_Open()
       With Application
           .ScreenUpdating = False
           .Calculation = xlManual
           .DisplayFullScreen = True
           .DisplayFormulaBar = False
           .CalculateBeforeSave = False
       End With
    
       Dim ws As Worksheet
       For Each ws In Me.Worksheets
           ws.Protect Contents:=True, _
           AllowFiltering:=True, _
           UserInterfaceOnly:=True
       Next ws
    
       With ActiveWindow
           .DisplayGridlines = False
           .DisplayHeadings = False
       End With
    
       Call SetCommandbar
    End Sub
  4. Speichern und Schließen: Speichere die Änderungen und schließe den VBA-Editor. Der Code wird nun beim Öffnen der Arbeitsmappe automatisch ausgeführt.


Häufige Fehler und Lösungen

  • Subscript out of range: Dieser Fehler tritt auf, wenn du auf ein nicht existierendes Arbeitsblatt zugreifst. Überprüfe, ob alle Arbeitsblätter im Workbook vorhanden sind.
  • Code funktioniert nicht: Stelle sicher, dass der Code im richtigen Modul (ThisWorkbook) eingefügt wurde und dass Makros in Excel aktiviert sind.

Alternative Methoden

  • Private Sub Auto_Open: Anstelle von Workbook_Open kannst du Sub Auto_Open() verwenden, um beim Öffnen der Arbeitsmappe einen bestimmten Code auszuführen.

    Sub Auto_Open()
      ' Dein Code hier
    End Sub
  • Option Private Module: Setze Option Private Module am Anfang deines Moduls, um die Sichtbarkeit deiner Subs auf das aktuelle Workbook zu beschränken.


Praktische Beispiele

Ein einfaches Beispiel für eine Private Sub Workbook_Open könnte sein, eine Meldung anzuzeigen:

Private Sub Workbook_Open()
    MsgBox "Willkommen in meiner Arbeitsmappe!"
End Sub

Tipps für Profis

  • Rücksetzen der Application-Einstellungen: Vergiss nicht, die Anwendungseinstellungen (wie ScreenUpdating oder Calculation) beim Schließen der Arbeitsmappe zurückzusetzen, um unerwünschte Effekte in anderen Workbooks zu vermeiden.

    Private Sub Workbook_BeforeClose(Cancel As Boolean)
      With Application
          .ScreenUpdating = True
          .Calculation = xlAutomatic
      End With
    End Sub
  • Fehlerbehandlung: Implementiere Fehlerbehandlung, um potenzielle Probleme elegant zu lösen:

    On Error GoTo ErrorHandler
    ' Dein Code hier
    Exit Sub
    
    ErrorHandler:
    MsgBox "Ein Fehler ist aufgetreten: " & Err.Description

FAQ: Häufige Fragen

1. Was ist der Unterschied zwischen Private Sub und Public Sub? Private Sub kann nur innerhalb des Moduls aufgerufen werden, während Public Sub von überall aus aufgerufen werden kann.

2. Wie kann ich einen Private Sub in einem anderen Modul aufrufen? Du kannst einen Public Sub erstellen, der dann den Private Sub aufruft, oder du kannst den Code in ein gemeinsames Modul verschieben.

3. Was bedeutet UserInterfaceOnly in der Protect-Methode? Diese Option erlaubt es, dass Makros weiterhin auf das geschützte Blatt zugreifen können, während der Benutzer die Inhalte nicht bearbeiten kann.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige