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
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
Top
#3
Klaus-Dieter,

du hast es auch auf mich abgesehen :D ... manno ^^
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
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
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ß
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
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
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
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
Top


Gehe zu:


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