Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

VBA - Vor Blattwechsel Makro ausführen
#1
Ich nochmal...


ich benötige noch einmal euren super Rat.
Ich habe einige Blätter in meiner Mappe. Sobald ich von einem Blatt ins nächste wechsle, soll eine Msgbox mit einer Abfrage kommen, ob man vorher speichern (per Makro) möchte. Das Problem dabei ist, dass bei dem Worksheet-Event "deactivate" das Blatt bereits gewechselt ist. Auf dem neuen Blatt erscheint die Msgbox und das Speichermakro würde eine pdf vom neuen, anstatt vom alten Blatt machen.

Gibt es irgendeine Alternative wie man das lösen kann?


Wenn dem nicht so ist, gäbes es anstattdessen eventuell eine Möglichkeit, beim Betätigen des "ja"-Knopfes zurück auf das ursprüngliche Blatt zu komme um von dort dann das Speichermakro manuell auszuführen?




Gruß und Danke
Antworten Top
#2
Hallo,

EasY und seine 52 Blätter.  Angel
Viele Grüße
Klaus-Dieter
Der Erfolg hat viele Väter, 
der Misserfolg ist ein Waisenkind
Richard Cobden
Antworten Top
#3
Klaus-Dieter,

du hast es auch auf mich abgesehen :D ... manno ^^
Antworten Top
#4
Moin mal wieder!
Nimm das Private Sub Workbook_SheetDeactivate(ByVal Sh As Object) in DieseArbeitsmappe.
Sh ist das letzte aktivierte Blatt, welches Du dann auswerten kannst.

Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
[-] Folgende(r) 1 Nutzer sagt Danke an RPP63 für diesen Beitrag:
  • EasY
Antworten Top
#5
Hallo EasY,

Zitat:Klaus-Dieter,

du hast es auch auf mich abgesehen :D ... manno ^^


nicht auf dich, nur auf deine Arbeitsweise.  Blush  Ich wünsche dir noch einen schönen Rest 3. Advent.
Viele Grüße
Klaus-Dieter
Der Erfolg hat viele Väter, 
der Misserfolg ist ein Waisenkind
Richard Cobden
Antworten Top
#6
Hi Ralf,

super, es klappt! Danke.

Noch eine kurze Ergänzungsfrage: Kann ich innerhalb dieser Prozedur auch überprüfen, ob überhaupt Veränderungen in dem besagten Tabellenblatt vorgenommen wurden? Dass die Msgbox nur aufgerufen wird, wenn Änderungen vorgenommen wurden?!


Gruß
Antworten Top
#7
Hallo,

mit der Abfrage  - If ActiveWorkbook.Saved = False Then ... - kannst du feststellen, ob etwas geändert wurde oder nicht!

Dazu habe ich in meiner Formelsammlung:


105. ermitteln, ob Tabelle geändert wurde oder nicht
ActiveWorkbook.Saved = True     es wurde seit der letzten Speicherung nichts geändert
ActiveWorkbook.Saved = False     es ist seit der letzten Speicherung etwas geändert worden

Man muss es dann nur richtig einsetzen und anwenden!
[Bild: attachment-190.gif]
Gruß Günter
aus der Helden-, Messe-, Musik-, Buch-, Universitäts- und Autostadt Leipzig
Antworten Top
#8
Ich teste es gleich, aber klingt vielversprechend :)

P.S.: Offensichtlich wende ich das dann wohl nicht richtig an :(


Code:
Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)

If ActiveWorkbook.Saved = False Then
   If IsNumeric(Sh.Name) Then

   If MsgBox("Sie verlassen das Kalenderblatt. Möchten Sie zurückkehren und speichern?", vbYesNo + vbQuestion, "Änderungen speichern") = vbYes Then
       Application.EnableEvents = False
       Worksheets(Sh.Name).Activate
       Application.EnableEvents = True
       Call speichern
       Else
   End If
End If

End Sub

So siehts zurzeit aus
Antworten Top
#9
Hallo,

für mein Verständnis fehlt da ein End If!

Private Sub Workbook_SheetDeactivate(ByVal Sh As Object
      If ActiveWorkbook.Saved = False Then
           If IsNumeric(Sh.Name) Then
                If MsgBox("Sie verlassen das Kalenderblatt. Möchten Sie zurückkehren und speichern?", vbYesNo + vbQuestion, "Änderungen speichern") = vbYes Then
                     Application.EnableEvents = False
                     Worksheets(Sh.Name).Activate
                     Application.EnableEvents = True
                     Call speichern
                 Else
                 End If
             End If
        End if
End Sub

Ansonsten müsste der Code funktionieren, du hast die Abfrage richtig verstanden und eingesetzt.
[Bild: attachment-190.gif]
Gruß Günter
aus der Helden-, Messe-, Musik-, Buch-, Universitäts- und Autostadt Leipzig
[-] Folgende(r) 1 Nutzer sagt Danke an Glausius für diesen Beitrag:
  • EasY
Antworten Top
#10
Nein das war es leider auch nicht ... die msgbox erscheint jedes Mal, wenn ich das Tabellenblatt wechsle.

Pardon, es geht doch - habe den Fehler gefunden. Ein anderes Makro überschreibt beim Verlassen immer eine bestimmte Zeile ... Danke Glausius
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste