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

Code beim Verlassen eines Worksheets

Forumthread: Code beim Verlassen eines Worksheets

Code beim Verlassen eines Worksheets
27.09.2004 10:16:21
Torsten
Hallo beisammen,
folgendes Makro würde ich gerne so einrichten, daß es startet, sobald das Worksheet("ENTRYFC") verlassen wird:
Application.ScreenUpdating = False
ActiveSheet.Unprotect "Kennwort"
Range("A5:M523").Select
Selection.Sort Key1:=Range("I5"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
Range("A5").Select
ActiveSheet.Protect "Kennwort"
ActiveWindow.ScrollRow = 1
ActiveWindow.ScrollColumn = 1
Application.ScreenUpdating = True
Könnt Ihr mir einen Tip geben? (Mit Worksheet Deactivate funktioniert's nicht)
Vielen Dank im voraus.
Gruß
Torsten
Anzeige

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Code beim Verlassen eines Worksheets
27.09.2004 10:54:32
Oberschlumpf
Hi Torsten
Zuerst einmal...
...mit Worksheet_Deactive wird dann für das aktuelle Tabellenblatt ein Ereignis ausgelöst, wenn Du innerhalb einer Excel-Datei in ein anderes Tabellenblatt wechselst.
Bsp:

Private Sub Worksheet_Deactivate()
MsgBox "test"
End Sub

Gibt die Meldung "Test", wenn ich ein anderes Tabellenblatt anklicke.
Dein Problem könnte darin liegen, dass Dein Code keinen Bezug auf das gewünschte sondern auf das NACH dem Wechsel aktuelle Tabellenblatt nimmt.
Ändere Deinen Code mal um wie folgt:

Application.ScreenUpdating = False
Sheet("ENTRYFC").Unprotect "Kennwort"
Sheet("ENTRYFC").Range("A5:M523").Select
Selection.Sort Key1:=Sheet("ENTRYFC").Range("I5"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
Sheet("ENTRYFC").Range("A5").Select
Sheet("ENTRYFC").Protect "Kennwort"
ActiveWindow.ScrollRow = 1
ActiveWindow.ScrollColumn = 1
Application.ScreenUpdating = True

Da ich dieses Bsp nicht getestet habe, empfehle ich Dir, vor Änderung, eine Sicherheitskopie Deiner Datei zu erstellen.
Konnte ich helfen?
Ciao
Thorsten
Anzeige
AW: Code beim Verlassen eines Worksheets
Torsten
Hallo Thorsten,
vielen Dank für Deine Rückmeldung.
nachdem ich Sheet in Sheets geändert habe, bleibt Excel nunmehr an der Stelle:
Sheets("ENTRYFC").Range("A5:M523").Select
hängen, mit der Meldung, daß die Select-Methode auf das Range-Objekt nicht ausgeführt werden kann. Außerdem scheint Excel gerade abgestürtzt zu sein...:-(
Hast Du noch eine Idee?
Gruß
Torsten
Anzeige
AW: Code beim Verlassen eines Worksheets
27.09.2004 12:20:55
Oberschlumpf
Hi Thorsten
Versuch es mal so:

Dim lstrBlattName As String
Application.ScreenUpdating = False
lstrBlattName = ActiveSheet.Name
Sheets("ENTRYFC").Unprotect "Kennwort"
Sheets("ENTRYFC").Select
Range("A5:M523").Select
Selection.Sort Key1:=Range("I5"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
Range("A5").Select
Sheet("ENTRYFC").Protect "Kennwort"
Sheets(lstrBlattName).Select
ActiveWindow.ScrollRow = 1
ActiveWindow.ScrollColumn = 1
Application.ScreenUpdating = True

Der Grund der aufgetretenen Fehlermeldung ist, dass ein Bereich nur selektiert werden kann, wenn das dazugehörige Tabellenblatt aktiv ist.
(wie gesagt, ich hatte es nicht getestet :-) )
Und gegen den Absturz hilft vielleicht die Tastenkombi Strg-Pause.
Je nach Quellcode läuft Excel bei einem Fehler in eine Endlosschleife und es sieht so aus, als ob Excel abgestürzt ist. Mit Strg-Pause kann ein fehlerhaftes Makro unterbrochen werden.
Konnte ich denn diesmal helfen?
Ciao
Thorsten
Anzeige
AW: Code beim Verlassen eines Worksheets
ypsilon
hi Thorsten,
ist es nicht einfacher auf dieses unnötige select zu verzichten ?
Sheets("ENTRYFC").Range("A5:M523").Sort Key1:=Sheets("ENTRYFC").Range("I5"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
cu Micha
AW: ereldigt - mT
Torsten
Hi Micha,
zweifellos richtig, Dein Einwand.
Das kommt vom Rekordern ohne nachzubessern :-)
Gruß
Torsten
Anzeige
AW: Code beim Verlassen eines Worksheets
27.09.2004 13:03:27
Oberschlumpf
Hi Micha
Ich wartete nur auf so eine Bemerkung :-)
Ja, Du hast sicher Recht, auf Select etc. verzichten zu können.
Aber...Asche auf mein Haupt...ich übernahm den Code von Thorsten einfach, bzw ergänzte/korrigierte ihn, OHNE zu testen. Deshalb hab ich nich weiter auf die Selects geachtet.
Und nun is der Torsten ohne H ja dank unserer Beider Hilfe glücklich ;-)
Bye
Thorsten
Anzeige
AW: erledigt - mT
Torsten
Hi Thorsten,
ja, sieht gut aus. :-)
Allerdings zuckt Excel beim Verlassen des bewußten Sheets ca. 10 sec. lang, trotz des Screenupdating = False. Merkwürdigerweise stelle ich dieses Phänomen nicht fest, wenn ich das Sortieren über einen Button im Sheet ausführen lasse.
Da ich nicht weiß, ob meine User dann nicht auch anfangen zu zucken, muß ich noch mal überlegen, ob ich Deine Lösung drin lasse oder ob ich die Button-Variante wähle.
Schau'n mer mal.
Zunächst also vielen Dank für Deine Hilfe.
Gruß
Torsten
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Code beim Verlassen eines Worksheets in Excel VBA


Schritt-für-Schritt-Anleitung

Um ein Makro beim Verlassen eines Worksheets in Excel VBA auszuführen, kannst du den folgenden Code verwenden. Dieser wird im Codebereich des jeweiligen Worksheets platziert.

Private Sub Worksheet_Deactivate()
    Application.ScreenUpdating = False
    Sheets("ENTRYFC").Unprotect "Kennwort"
    Sheets("ENTRYFC").Range("A5:M523").Sort Key1:=Sheets("ENTRYFC").Range("I5"), Order1:=xlAscending, Header:=xlGuess, _
    OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
    Sheets("ENTRYFC").Protect "Kennwort"
    Application.ScreenUpdating = True
End Sub

Dieser Code sorgt dafür, dass beim Verlassen des Worksheets ("ENTRYFC") die Daten im Bereich A5:M523 automatisch sortiert werden.


Häufige Fehler und Lösungen

  1. Fehler: "Select-Methode kann nicht auf das Range-Objekt ausgeführt werden."

    • Lösung: Stelle sicher, dass du das richtige Worksheet aktivierst, bevor du versuchst, einen Bereich auszuwählen. Verwende Sheets("ENTRYFC").Select vor der Auswahl des Bereichs.
  2. Excel scheint zu hängen oder stürzt ab.

    • Lösung: Drücke Strg + Pause, um ein laufendes Makro anzuhalten. Dies kann hilfreich sein, wenn ein Fehler in der Schleife auftritt.

Alternative Methoden

Wenn du die Verwendung von Select vermeiden möchtest, kannst du den Code optimieren. Anstatt einen Bereich auszuwählen, kannst du direkt darauf zugreifen:

Private Sub Worksheet_Deactivate()
    Application.ScreenUpdating = False
    Sheets("ENTRYFC").Unprotect "Kennwort"
    Sheets("ENTRYFC").Range("A5:M523").Sort Key1:=Sheets("ENTRYFC").Range("I5"), Order1:=xlAscending, Header:=xlGuess, _
    OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
    Sheets("ENTRYFC").Protect "Kennwort"
    Application.ScreenUpdating = True
End Sub

Diese Methode ist effizienter und reduziert die Wahrscheinlichkeit von Fehlern.


Praktische Beispiele

Hier sind einige Beispiele, wie das Worksheet_Deactivate-Ereignis effektiv genutzt werden kann:

  1. Datenvalidierung beim Verlassen:

    • Du kannst auch zusätzliche Validierungen oder Berechnungen durchführen, bevor das Worksheet verlassen wird. Füge einfach mehr Code innerhalb der Worksheet_Deactivate-Subroutine hinzu.
  2. Benachrichtigungen:

    • Eine einfache MsgBox kann hinzugefügt werden, um den Benutzer zu informieren, dass das Worksheet verlassen wurde:
    Private Sub Worksheet_Deactivate()
       MsgBox "Du verlässt das Worksheet 'ENTRYFC'."
    End Sub

Tipps für Profis

  • Backup erstellen: Erstelle immer eine Sicherungskopie deiner Excel-Datei, bevor du Änderungen am VBA-Code vornimmst.
  • Fehlerbehandlung: Implementiere Fehlerbehandlungsroutinen, um unerwartete Probleme zu lösen. Zum Beispiel:
On Error GoTo ErrorHandler
' Dein Code hier
Exit Sub
ErrorHandler:
    MsgBox "Ein Fehler ist aufgetreten: " & Err.Description
  • Optimierung der Performance: Verwende Application.ScreenUpdating = False und Application.Calculation = xlCalculationManual, um die Performance beim Ausführen von Makros zu verbessern.

FAQ: Häufige Fragen

1. Was ist der Unterschied zwischen Worksheet_Deactivate und Worksheet_Change?

  • Worksheet_Deactivate wird ausgelöst, wenn das Worksheet verlassen wird, während Worksheet_Change aktiviert wird, wenn eine Zelle im Worksheet verändert wird.

2. Wie kann ich sicherstellen, dass mein Makro immer korrekt ausgeführt wird?

  • Teste den Code in verschiedenen Szenarien und achte darauf, dass alle Referenzen korrekt sind. Verwende auch Debugging-Tools in VBA, um Fehler zu identifizieren.

3. Warum funktioniert mein Code nicht, wenn ich das Worksheet verlasse?

  • Überprüfe, ob der Code im richtigen Worksheet-Modul gespeichert ist und dass keine anderen Makros oder Ereignisse den Ablauf stören.

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