1. Liebe Forumsgemeinde,

    aufgrund der Bestimmungen, die sich aus der DSGVO ergeben, müssten umfangreiche Anpassungen am Forum vorgenommen werden, die sich für uns nicht wirtschaftlich abbilden lassen. Daher haben wir uns entschlossen, das Forum in seiner aktuellen Form zu archivieren und online bereit zu stellen, jedoch keine Neuanmeldungen oder neuen Kommentare mehr zuzulassen. So ist sichergestellt, dass das gesammelte Wissen nicht verloren geht, und wir die Seite dennoch DSGVO-konform zur Verfügung stellen können.
    Dies wird in den nächsten Tagen umgesetzt.

    Ich danke allen, die sich in den letzten Jahren für Hilfesuchende und auch für das Forum selbst engagiert haben. Ich bin weiterhin für euch erreichbar unter tti(bei)pcwelt.de.
    Dismiss Notice

Excel 2003 / Makro (Save + Event-Handler)

Discussion in 'Office-Programme' started by brum, Aug 22, 2007.

Thread Status:
Not open for further replies.
  1. brum

    brum Kbyte

    Hallo zusammen

    Ich habe etwas ausprobiert, leider funktioniert es nicht ganz, wie ich will.

    Also folgtendes:

    1. Ich habe ein Makro, das mittels "ActiveWorkbook.SaveAs" die Datei/die aktuelle Version unter einem neuen Namen abspeichert.
    2. Nun wollte ich mittels "Workbook_BeforeSave" einen Event-Handler einrichten, dass ich die Datei nicht aus Versehen unter dem Original-Namen abspeichere. (Da ich an den Versionen zum Teil manuelle Änderungen vornehme.)

    Nun habe ich das Problem, dass, sobald mein Makro zum SaveAs-Befehl kommt, auch das Event-Handler-Makro ausführt. Eigentlich dachte ich, durch den ersten Parameter die SaveAs-Speicherungen auszusortieren...

    Hier noch der Code meines Test-Event-Handlers (in "DieseArbeitsmappe"):

    Code:
    Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
      [B]If SaveAsUI = False Then[/B]
        If ActiveSheet.Name = "Tabelle1" And Left$(ActiveWorkbook.Name, 8) = "Original" Then
          a = MsgBox("Datei wirklich unter dem Originalnamen speichern?", vbOKCancel)
          If a <> vbOK Then Cancel = True
        End If
      End If
    End Sub
    
    Leider ist der Parameter SaveAsUI bei "ActiveWorkbook.SaveAs" nicht wahr sondern falsch.

    Wie kann ich verhindern, dass der Event-Handler in mein Makro eingreift? Gerade habe ich zwar eine Idee, wie ich es "umgehen" könnte, aber vielleicht gibt es ja eine einfache(re) Lösung.

    Besten Dank für alle Ideen.

    Gruss
    Bruno
     
  2. Beverly

    Beverly Halbes Megabyte

    Hi Bruno,

    ich verwende in diesem Fall immer folgenden Code, vielleicht hilft dir ja das Prinzip weiter

    Code:
    Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
        Dim strAbfrage As String
        Dim strSpeichername As String
        Dim Fso
        strSpeichername = ActiveSheet.Range("C9") & ".xls"
        Set Fso = CreateObject("Scripting.FileSystemObject")
        Application.EnableEvents = False
        If Fso.fileexists("C:\Excel_test\" & strSpeichername) Then
            strAbfrage = MsgBox("Soll die vorhandene Arbeitsmappe " & strSpeichername & " überschrieben werden", vbYesNoCancel)
            If strAbfrage = vbYes Then
                Application.DisplayAlerts = False
                ThisWorkbook.SaveAs "C:\Excel_test\" & strSpeichername
                Application.DisplayAlerts = True
            End If
        End If
        Application.EnableEvents = True
    End Sub
    
     
  3. Beverly

    Beverly Halbes Megabyte

    Hi Bruno,

    mir ist gerade aufgefallen, dass ich den falschen Teil aus meinem Code kopiert habe. Sollte so heißen

    Code:
            If strAbfrage = vbYes Then
                ThisWorkbook.Save
            End If
     
  4. brum

    brum Kbyte

    Hallo Karin

    Danke.

    "Application.EnableEvents = False" ist genau das, um dieses Ereignis auszuschalten.

    Gruss
    Bruno
     
Thread Status:
Not open for further replies.

Share This Page