Danke
- auch für den Hinweis mit dem Überschreiben. In meinem Fall macht das aber nichts.
Ich dachte erst, du hättest "FileFormat:=52" vergessen. Jedoch wird das bei SaveCopyAs nicht benötigt - bzw. ist gar nicht erlaubt. Jedoch eine Sache funktionierte nicht. Die beiden Workbooks müssen beide parallel geöffnet sein. Das ist wichtig, damit die Pfade aktualisiert werden in der Ausgangsdatei. Sonst kann ich nicht von der Ausgangsdatei zu Feldern in der "SaveCopyAs-Datei" verweisen(also diese in der Ausgansdatei darstellen), wenn die "SaveCopyAs-Datei" nicht geöffnet ist.
-Ich habe später eine Hauptdatei & ein paar Nebendateien(welche ich über SaveCopyAs erstelle).
-Im Grund ist dann nur die Hauptdatei geöffnet. Sie holt sich aber Daten aus Feldern der einzelnen SaveCopyAs-Dateien.
-Wenn jetzt die Hauptdatei und die SaveCopyAs-Dateien nie gleichzeitig geöffnet waren, findet die Hauptdatei den Pfad der SaveCopyAs-Dateien nicht. Und somit kann ich auch keine Zellinhalte verknüpfen. Wenn ich den Ordner mit den ganzen Dateien umbenenne, umkopiere oder auf USB-Stick an einem anderem PC nutze, werden die SaveCopyAs-Dateie aber trotzdem von der Hauptdatei erkannt. Aber auch dann nur, wenn die SaveCopyAs-Dateie vorher(vorm Kopieren, vorm Umbenennen des Ordners, etc.) zusammen mit der Hauptdatei geöffnet hatte.
So geht auch das jetzt:
Code:
Sub Erstellen()
ActiveWorkbook.Save
ActiveWorkbook.SaveCopyAs Filename:= _
ActiveWorkbook.Path & "\" & Worksheets("Betrag").Range("J1").Value & ".xlsm"
Workbooks.Open Filename:=ActiveWorkbook.Path & "\" & Worksheets("Betrag").Range("J1").Value & ".xlsm
ActiveSheet.Shapes("Picture 21").Visible = False
ActiveWorkbook.Save
ActiveWorkbook.Close savechanges:=False
End Sub
Nehmen wir mal an, man arbeitet auf einem langsamen USB-Stick & die Datei braucht länger zum speichern. Wird zwischen:
Code-Zeile: ActiveWorkbook.Path & "\" & Worksheets("Betrag").Range("J1").Value & ".xlsm" & Code-Zeile: Workbooks.Open Filename:=ActiveWorkbook.Path & "\" & Worksheets("Betrag").Range("J1").Value & ".xlsm
gewartet bis die Datei gespeichert ist?
Jetzt kann es sein, dass die SaveAs-Workbook(eine ältere Version) bereits geöffnet ist, vor Ausführung des Makros. Dann kann diese ja leider nicht überschrieben werden. Also soll ein Hinweis ausgegeben werden. So mein Versuch:
Code:
Sub Erstellen()
ActiveWorkbook.Save
For Each x In Workbooks
If x.Name = Worksheets("Betrag").Range("J1").Value & ".xlsm"
MsgBox "Datei ist schon geöffnet!"
GoTo weiter
End If
Next
ActiveWorkbook.SaveCopyAs Filename:= _
ActiveWorkbook.Path & "\" & Worksheets("Betrag").Range("J1").Value & ".xlsm"
Workbooks.Open Filename:=ActiveWorkbook.Path & "\" & Worksheets("Betrag").Range("J1").Value & ".xlsm
ActiveSheet.Shapes("Picture 21").Visible = False
ActiveWorkbook.Save
ActiveWorkbook.Close savechanges:=False
weiter:
End Sub
Jedoch funktioniert das nicht. Die MsGBox wird mir noch angezeigt, dann springt er zum Debugger und markiert mir:
Code:
ActiveWorkbook.SaveCopyAs Filename:= _
ActiveWorkbook.Path & "\" & Worksheets("Betrag").Range("J1").Value & ".xlsm"
Welches ja an sich funktioniert, wie man Makro vorher ja sehen kann. Er soll ja genau das auch nicht ausführen, sondern dann bei :weiter, weitermachen.
Julia :)