Frage von DJBaem, 87

Excel VBA Speichern unter...?

Hallo Community,

kennt vielleicht jemand den Code, mit dem das Fenster aufgeht zur Abfrage des neuen Namen?

Beispiel:

Der Name der Tabelle lautet zb: Tabellenvorlage.xlsm

Beim öffnen der Tabelle soll ein Fenster aufgehen, welches mich nach einem neuen Dateiname fragt. Hier soll aber nicht einfach das Windowsfenster geöffnet werden, wo ich einen komplett neuen Name eingeben muss. Es soll ein kleines fenster aufgehen, wo ich dann nur noch zB: MM eingeben muss, sodass das Sheet dann automatisch als "Tabellenvorlage_MM.xlsm" abgespeichert wird und ich in dieser weiterarbeite.

Macht jetzt eine andere Person die "Tabellenvorlage.xlsm" auf und gibt dort ein "XY", dann soll automatisch eine Datei mit dem Name "Tabellenvorlage_XY.xlsm" erstellt werden, in der er weiter arbeitet.

Kennt jemand diesen Code?

Danke im Voraus.

LG Benny

Expertenantwort
von Ninombre, Community-Experte für Excel, 45

ActiveWorkbook.SaveCopyAs ("Tabellenvorlage" & InputBox("Dateinamen bitte eingeben: ") & ".xlsx")

Das speichert dann eine Kopie der Datei (ohne die Makros)

Wenn das Makro direkt beim Öffnen der Datei verwendet werden soll, muss das im VBA Editor zu "DieseArbeitsmappe" abgelegt werden:

Private Sub Workbook_Open()
ActiveWorkbook.SaveCopyAs ("Dateivorlage" & InputBox("Dateinamen bitte eingeben: ") & ".xlsx")
MsgBox "Dateivorlage wurde angelegt. Diese Datei wird nun geschlossen"
ActiveWorkbook.Close
End Sub

Ich würde es über die Kopie lösen. Wenn die Datei, in der das Makro steht, selbst genutzt wird, dann wird bei jedem Öffnen wieder das Makro durchlaufen. Man könnte dann zwar abfragen, ob der Dateiname verändert wurde, aber richtig praktisch ist das aus meiner Sicht nicht.

Kommentar von DJBaem ,

Wow super, danke. 
Weisst du auch, wie ich vorab den Speicherpfad angeben kann? 

Jetzt hab ich die Testtabelle.xlsm im Verzeichniss "Dokumente\Tabelle". Es speichert aber im Ordner "Dokumente" ab, also einen Unterordner und die neue Datei soll aber im selben Ordner sein. 

Kommentar von DJBaem ,

Habs schon :) Danke dir :)

Kommentar von Ninombre ,

wenn die Kopie immer genau da landen soll, wo auch das Original liegt, wäre es so möglich

namenserweiterung = InputBox("Bitte den Dateinamen eingeben:")
ActiveWorkbook.SaveCopyAs (ActiveWorkbook.Path & "\tabellenvorlage" & namenserweiterung & ".xlsx")
MsgBox "Dateivorlage wurde angelegt. Diese Datei wird nun geschlossen"
ActiveWorkbook.Close

Du kannst den Pfad, wenn es ein fester Wert sein soll, sonst einfach bei "tabellenvorlage" eintragen: "c:\users\hugo\vorlage" & ...

Kommentar von DJBaem ,

Ich hab das Ganze jetzt so gemacht und es haut hin. Danke für deine Hilfe :)

Private Sub Workbook_Open()


Dim sPfad As String

sPfad = "C:\Users\DjBae\Documents\Tabelle\"

Application.Visible = False

ActiveWorkbook.SaveAs sPfad & ("Testtabelle_" & InputBox _
("Bitte gib deinen Name ein." & vbLf & vbLf & _
"Es wird automatisch eine neue Datei erstellt, welche mit '_DEINEM NAME' endet.") & ".xlsm")

frmVL.Show

End Sub
Kommentar von DJBaem ,

Was allerdings doof ist, selbst wenn ich auf "Abbrechen" klicke, wird eine neue Datei erstellt, anstatt dass eine Fehlermeldung kommt oder so. :/

Kommentar von Ninombre ,

dann musst du das noch getrennet abfragen:

Dim sPfad, namenszusatz As String

sPfad = "C:\Users\DjBae\Documents\Tabelle\"

namenszusatz = InputBox _
("Bitte gib deinen Name ein." & vbLf & vbLf & _
"Es wird automatisch eine neue Datei erstellt, welche mit '_DEINEM NAME' endet.")
Application.Visible = False

If namenszusatz = "" Then Exit Sub

ActiveWorkbook.SaveAs sPfad & ("Testtabelle_" & namenszusatz & ".xlsm")

Das Makro wird so allerdings auch später immer beim Öffnen durchlaufen und will einen neuen Namen. Um das abzufangen, kannst Du direkt zu Beginn den Namen prüfen

if activeworkbook.name<>... then exit sub.

bei den... muss den Name der Vorlage stehen. D.h. wenn die Datei schon einen Namenszusatz bekommen hat, wird das Makro beendet.

Kommentar von DJBaem ,

Hat perfekt geklappt, danke :) 

Eine Frage habe ich aber noch:
Aktuell wird ja direkt beim Öffnen nach dem Name gefragt, sodass ja direkt eine neue Tabelle erstellt wird, in der man arbeitet.

Kann man hier irgendwas machen, sodass nachdem die neue Datei erstellt wurde, dieses Makro automatisch im neuen Sheet gelöscht wird?

Weil nehmen wir mal an, dass ich jetzt fertig bin mit meiner Arbeit in der Datei "Testtabelle_Benny.xlsm" zu arbeiten und schließe sie..
Will ich sie dann aber wieder öffnen, werde ich klarer weise wieder nach einem Name gefragt und arbeite automatisch in einer neuen Tabelle.

Kann man hier also irgendwie dafür sorgen, dass die neue Datei dieses Makro nicht ausführt?

LG
Benny

Kommentar von Ninombre ,

Wenn Du die Makros in der neuen Datei nicht brauchst, dann speicher die Kopie einfach als xlsx ohne Makro ab

Dim sPfad, namenszusatz As String
sPfad = "C:\Users\DjBae\Documents\Tabelle\"
namenszusatz = InputBox _
("Bitte gib deinen Name ein." & vbLf & vbLf & _
"Es wird automatisch eine neue Datei erstellt, welche mit '_DEINEM NAME' endet.")
Application.Visible = False
If namenszusatz = "" Then Exit Sub
Application.DisplayAlerts = False
ActiveWorkbook.SaveAs sPfad & ("Testtabelle_" & namenszusatz & ".xlsx")
Application.DisplayAlerts = True

Kommentar von DJBaem ,

Als xlsx kann ichs nicht speichern, da ja andere Makros in der Mappe sind, die auch später noch genutzt werden müssen. :/

Kommentar von DJBaem ,

Habs schon :)

Keine passende Antwort gefunden?

Fragen Sie die Community

Weitere Fragen mit Antworten