[Excel] VBA: Falsche Meldung beim Speichern ...

amn.ssy

Erfahrenes Mitglied
Hallo,

leider plagt mich immer noch das Problem der falschen Meldung beim Speichern einer Datei ohne, daß ich bislang hinter die Lösung gelangt wäre.
Das Ziel ist, daß ich die Meldung "File exist - Overwrite ..." auch wirklich nur dann erhalte wenn die Datei tatsächlich existiert und überschrieben werden würde.
Im aktuellen Workflow ist das jedoch nie der Fall (zumindest kann ich mir derzeit keinen vorstellen).
Entweder wird im Dateinamen die Versionnummer (sVersion) hochgezählt oder der Dateiname ändert sich an einer anderen Stelle (sDateMid).
Jedenfalls ist er bei jedem Speichern immer ein anderer und von daher sollte es die Meldung erst garnicht geben.

Anhang anzeigen 62875

Die einzige Ausnahme und da wird's etwas kniffliger ist, wenn die Datei von einer anderen aufgerufen und geändert wurde, dann muß sie mit oder ohne Rückfrage überschrieben werden!

Hier erstmal der Code für den Bereich "ohne Ausnahme"

ThisWorkbook
Code:
Option Explicit
Public alreadySaved As Boolean

Private Sub Workbook_Open()
    MyTag = "Enable"
End Sub

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    If alreadySaved = False Then
        Cancel = True
        frmSave.Show
    Else
        If MsgBox("File already exist - Overwrite?", vbExclamation + vbYesNo, "Caution") = vbNo Then
        Cancel = True
        End If
    End If
End Sub

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    If ThisWorkbook.Saved = False Then
        alreadySaved = False
    End If
End Sub

frmSave

Code:
...
Private Sub cmdSave_Click()
ThisWorkbook.alreadySaved = True

ActiveWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\" & sFileName & sDateMid & " (" & sVersion _
& " " & sInitials & " " & sDateLong_en & ").xlsm", FileFormat:=xlOpenXMLWorkbookMacroEnabled

If ckbReport = True Then
    WriteRunReport
    MsgBox "ReportFile was written"
End If

    Unload frmSave

End Sub
...

Im Ausnahmefall (die o.g Datei wird durch eine andere (Centralized.xlsm) aufgerufen) liegt das Problem wohl hier:

Code:
Workbooks(sWb2Name).Close SaveChanges:=False

sWb2Name ist die Datei aus Zeile 5\6

An der Stelle kommt mir aber dann die frmSave in die Quere, die ich aber nicht brauchen kann, da in dieser Prozess komplett automatisiert ist und wie gesagt die Datei in jedem Fall überschrieben werden soll.

Gruß
_opiWahn_
 
2. Code-Block: Schieb mal Zeile 3 unter die Zeile 5/6

Du setzt alreadySaved auf True und gehst dann zu SaveAs, was dann BeforeSave triggert, und dort biegt der Code dann korrekterweise in den Else-Teil ab, weil alreadySaved eben nicht False ist.

Ist zumindest meine Vermutung. Ich hätte das ganze eher mit einer FileExist-Funktion gelöst (Gibts zuhauf Beispiele im Internet bzw. sogar hier im Forum)
 
Hallo Zvoni,

vielen Dank für die Idee.
Leider löste es das Problem nicht!
Statt des bekommen ich dann einen Runtime Error 400 "Das Formular wird bereits angezeigt und kann nicht gebunden dargestellt werden.
Hast du zufällig einen zielführenden Link wie man die über FileExist lösen kann?
Vieleicht sehe ich gerade den Baum vor lauter Wald nicht ...

Gruß
opiWahn
 
http://www.office-loesung.de/ftopic264723_0_0_asc.php
2. post, zweites beispiel dort.
Wichtig: die variable File braucht den kompletten dateinamen mit pfad
Und diese abfrage schiebst ins BeforeSave-ereignis

EDIT: oder folgender versuch
Mein vorschlag vom ersten post behalten, und im 1. codeblock zeile 12 wie folgt:

If frmsave is nothing then frmsave.show
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück