[Word & Excel 2003] Problem mit Speicher-Event

HonniCilest

Erfahrenes Mitglied
Hallo Leute,

Ich habe ein kleines Problem mit den Speicher-Events in Word und Excel.

Ziel:
Word- und Excel-Dokumente, welche im Intranet gespeichert sind, dürfen dort nicht durch Speichern des Dokumentes überschrieben werden.

Problem:
Ein Schreibschutz ist hier nicht möglich und einige haben die Rechte zur Dokument-Bearbeitung, wodurch es durchs Speichern überschrieben werden würde.

Idee:
Speicher-Event abfangen und hier aufgrund des Pfades (im Intranet mit http am Anfang) ggf. ein Speichern unter erzwingen.

In Word sieht dies so aus:
Code:
'Achtung dieses Event muss im Gegensatz zu Excel registriert werden
Private Sub App_DocumentBeforeSave(ByVal Doc As Document, SaveAsUI As Boolean, Cancel As Boolean)
    If Left(ThisDocument.Path, 4) = "http" Then
        MsgBox "Dokument darf nur lokal abgespeichert werden!"
        ChangeFileOpenDirectory ("C:\Documents and Settings\" & Environ("UserName") & "\Desktop")
        With Application.FileDialog(msoFileDialogSaveAs)
            .InitialFileName = "xxx.doc"
            .AllowMultiSelect = False
            .Show
            If .SelectedItems.Count <> 0 Then
                ThisDocument.SaveAs FileName:=.SelectedItems(1), FileFormat:=wdFormatDocument
            End If
        End With
        Cancel = True
    End If
End Sub

Entsprechend parallel sieht dies in Excel aus:
Code:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    If Left(ThisWorkbook.Path, 4) = "http" Then
        MsgBox "Dokument darf nur lokal abgespeichert werden!"
        ChDir "C:\Documents and Settings\" & Environ("UserName") & "\Desktop"
        With Application.FileDialog(msoFileDialogSaveAs)
            .InitialFileName = "xxx.xls"
            .AllowMultiSelect = False
            .Show
            If .SelectedItems.Count <> 0 Then
                ThisWorkbook.SaveAs Filename:= .SelectedItems(1), FileFormat:= xlNormal
            End If
        End With
        Cancel = True
    End If
End Sub

Allerdings reagieren Excel und Word anders auf den Code, in Word funktioniert alles wie gewünscht. Bei Excel hingegen ruft er das Event lediglich ein 2. mal auf, wodurch auch das interne Speichern abgebrochen wird (ich wundere mich auch, warum er dann nicht in eine Endlosschleife läuft).

Hat jemand eine Idee wie ich das 2. Speichervent umgehen kann oder was ich falsch gemacht haben könnte?
 
Zuletzt bearbeitet:
Grüezi HonniCilest

Du kannst/musst das erneute Auslösen des Events in deinem Code unterbinden indem Du zu Beginn mit Aplication.EnableEvents = False diese ausschaltest und am Ende wieder einschaltest mit Aplication.EnableEvents = True
 

Neue Beiträge

Zurück