2.3k Aufrufe
Gefragt in Tabellenkalkulation von
Bearbeitet
Hallo zusammen,

ich habe Tabellen-Vorlagen, mit denen ich neue Dateien erstelle.
Diese müssen logischerweise mit einem neuen Namen gespeichert werden, da diese zunächst wie die MS-eigenen neuen Domumente temporär "Dokument1" usw. heißen und noch nicht auf dem Datenträger existieren.

Ich habe nun Makros, welche bedingen, dass die Datei bereits auf dem Datenträger gespeichert wurde und ansonsten Fehler produzieren.

Nun die eigentliche Frage:

Wie frage ich per VBA ab, ob die Datei schon gespeichert wurde oder nicht?

Liebe Grüße

Peter

P.S.: Vielleicht habe ich es verkompliziert ausgedrückt:
Es geht um neu erstellte Dateien, die noch nicht auf den Datenträger geschrieben wurden.

11 Antworten

0 Punkte
Beantwortet von beverly_ Experte (3.3k Punkte)

Hi Peter,

ich weiß nicht ob ich deine Frage richtig verstanden habe: du willst prüfen, ob es eine Mappe mit einem definierten Namen bereits gibt?

    If Dir("E:\Z_Test\Mappe7.xlsm") <> "" Then
        MsgBox "Mappe schon vorhanden"
    Else
        MsgBox "Kann gespeichert werden da noch nicht vorhanden"
    End If

Name der Mappe und Speicherpfad musst du natürlich anpassen.


Bis später, Karin

0 Punkte
Beantwortet von
Hallo Karin,

prinzipiell schon, nur im Detail habe ich mich wahrscheinlich zu ungenau ausgedrückt.

Ich möchte prüfen, ob diese Datei überhaupt schon einmal gespeichert worden ist, und der Name ist ja noch nicht vergeben.
0 Punkte
Beantwortet von beverly_ Experte (3.3k Punkte)

Hi Peter,

du willst also prüfen, ob die Vorlage, aus der das aktuelle Dokument erstellt wurde, sozusagen bereits einmal benutzt und als Atbeitsmappe gespeichert wurde? Ich weiß zwar nicht was das für Sinn machen soll, aber dazu müsstest du alle gespeicherten Arbeitsmappe öffen und den Template-Namen auslesen - wenn dieser mit deinem aktuell benutzen Template-Namen übereinstimmt dann wurde die Vorlage bereits benutzt. Den Template-Namen kannst du so ermitteln:

ActiveWorkbook.BuiltinDocumentProperties(6)

Bis später, Karin

0 Punkte
Beantwortet von m-o Profi (22.7k Punkte)

Hallo Peter,

andere Möglichkeiten:

If ThisWorkbook.Saved = False Then MsgBox "Nicht gespeichert"
If ThisWorkbook.Path = "" Then MsgBox "Nicht gespeichert"

bzw.

If ThisWorkbook.Saved = True Then MsgBox "Gespeichert"
If ThisWorkbook.Path <> "" Then MsgBox "Gespeichert"


Gruß

M.O.

0 Punkte
Beantwortet von beverly_ Experte (3.3k Punkte)
@M.O.,

das funktioniert aber nicht wenn es sich um ein Template handelt, das aus einer Vorlage erstellt wurde.

Bis später, Karin
0 Punkte
Beantwortet von m-o Profi (22.7k Punkte)
Hallo Karin,

wenn ich die Fragestellung richtig verstehe, dann hat Peter Excelvorlagen (Endung .xltx oder .xltm) erstellt, aus denen er neue Tabellen generiert. Und bei mir (Excel 2016) ergeben beide Versionen bei einer aus einer Vorlage erstellten neuen Mappe, die noch nicht gespeichert wurde, das gewünschte Ergebnis.

Oder verstehe ich die Frage völlig falsch?

Gruß

M.O.
0 Punkte
Beantwortet von beverly_ Experte (3.3k Punkte)

@M.O.,

die Fragestellung habe ich anders verstanden: er erstellt aus einer .xltm/.xltx eine neue Mappe und möchte nun feststellen, ob er diese .xltm/xltx bereits benutzt und daraus eine andere Mappe abgespeichert hat.

Beispiel:

1. ich erstelle eine neue Mappe aus einer .xltm

2. ich speichere dieses unter einem beliebigen Namen und schließe die gespeicherte Mappe

3. ich erstelle eine neue Mappe und will prüfen, ob diese .xltm bereits benutzt und eine andere Mappe daraus erstellt wurde und führe deinen Code aus - er gibt mir aus: False

Dieses Ergebnis ist aber, wenn ich von der Fragestellung ausgehe wie ich sie verstanden habe, nicht richtig, denn ich habe bereits eine Mappe aus dieser .xltm erstellt und gespeichert.

Mit anderen Worten: ThisWorkbook.Saved gibt immer False aus, solange eine Mappe (gleichgültig ob aus einer eigenen Vorlage oder einer leeren Vorlage von Excel)  noch keine Dateiendung hat (unter der sie gespeichert wurde).

Ich benutze auch Excel2016.

Bis später, Karin

0 Punkte
Beantwortet von m-o Profi (22.7k Punkte)

Hallo Karin,

mal sehen, was Peter mit seiner Frage gemeint hat wink.

Gruß

M.O.

0 Punkte
Beantwortet von

Hallo Ihr beiden,

vielen Dank für Eure Antworten.

Die von mir gesuchte Lösung ist jene von M.O.  Vielen Dank dafür!  :-)

Karin, tut mir leid, wenn ich mich so unklar/missverständlich ausgedrückt habe. Mir fiel einfach keine
bessere Formulierung ein.

Der Hintergrund ist eben der, dass ich Makros integriert habe, die auf den Dateinamen zurückgreifen müssen.
Und wenn die neu erstellte Datei noch nicht gespeichert ist, folglich auch keinen Dateinamen hat,
produzieren diese Makros eben Fehler, die ich auf diese Weise abfangen möchte; also z.B. eine MsgBox
anzeige mit dem Hinweis "Erst zu speichern, Du Dödel!"  :-)

btw: Wie bekommt Ihr eigentlich immer die Code-Zeilen in diesem speziellen Format hier abgebildet?

Nochmals vielen Dank und liebe Grüße

Peter

P.S.: Ich fürchte, nachher kommt die nächste Frage... wink

0 Punkte
Beantwortet von

Mir ist gerade beim Testen aufgefallen, dass die Abfrage

If ThisWorkbook.Path = "" Then MsgBox "Nicht Gespeichert"

das eigentlich richtige Ergebnis liefert.
Die Abfrage an ThisWorkbook.Saved liefert auch wieder ein negatives Ergebnis, wenn 
nach dem letzten Speichern Veränderungen vorgenommen wurden, was in diesem Fall überflüssig und
störend wäre.
Aber: diese Erkenntnis lässt sich anderweitig sicherlich auch nochmal verwerten.  :-)
...