Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Datei im gleichen Ordner speichern

Datei im gleichen Ordner speichern
27.11.2020 13:01:42
Ulrich
Hallo,
ich habe ein kleines Problem.
Ich habe eine Vorlage-Datei, mit der ich Protokolldateien erzeuge.
Wenn ich die Vorlage Datei öffne wird ja automatische eine XLS Datei mit 1 als Namensendung generiert.
Ziel:
Über ein Makro möchte ich diese Datei mit einem Namen bestehend aus Zelle H1 und Zelle L1 im gleichen Ordner speichern in der auch die Vorlagedatei ist. Danach soll die Vorlagedatei wieder geöffnet werden.
Das Speichern unter dem gewünschten Namen funktioniert schon, nur nicht in dem Ordner in der die Vorlagedatei ist.
Auch ist das Öffnen der Vorlagedatei nach dem Speichern noch nicht integriert.
Kann mir hierbei jemand helfen?
Hier die Datei (müsste dann als Vorlagedatei abgespeichert werden)
https://www.herber.de/bbs/user/141881.xlsx
Viele Grüße Ulli
Anzeige

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Datei im gleichen Ordner speichern
27.11.2020 13:54:33
Tino
Hallo,
wenn du eine Vorlage öffnest, hat diese keinen Bezug zum Speicherort.
Es wird der in Excel hinterlegte Standardordner verwendet.
Du müsstest beim Speichern der Vorlage, den Ordner irgendwohin schreiben um darauf zurückzugreifen.
Gruß Tino
hier mal eine Variante
27.11.2020 15:05:48
Tino
Hallo,
hier mal eine Variante.
Wenn die Vorlage selbst gespeichert wird,
wird der Pfad als benutzerdefinierte Dokumenteigenschaft gespeichert.
Bevor du die Vorlage speicherst, diesen Code hinterlegen.
Code in DieseArbeitsmappe
Option Explicit
Private Sub Workbook_AfterSave(ByVal Success As Boolean)
Dim CP As Object
If ThisWorkbook.FullName Like "*.xlt?" Or ThisWorkbook.FullName Like "*.xlt" Then
For Each CP In ThisWorkbook.CustomDocumentProperties
If CP.Name = "FullPath" Then CP.Delete: Exit For
Next
ThisWorkbook.CustomDocumentProperties.Add Name:="FullPath", _
LinkToContent:=False, _
Type:=msoPropertyTypeString, _
Value:=ThisWorkbook.FullName
Application.EnableEvents = False
ThisWorkbook.Save
Application.EnableEvents = True
End If
End Sub
Code in Tabelle1
Option Explicit
Private Sub CommandButton1_Click()
Call SaveSpezial
End Sub
Code in ein Modul
Option Explicit
Sub SaveSpezial()
Dim CP As Object, sPath$, sName$, sSaveFullName$
For Each CP In ThisWorkbook.CustomDocumentProperties
If CP.Name = "FullPath" Then Exit For
Next
If CP Is Nothing Then
MsgBox "kein Pfad aus Vorlage!", vbExclamation
Exit Sub
End If
sPath = Left$(CP, InStrRev(CP, "\"))
sName = Right$(CP, Len(CP) - InStrRev(CP, "\"))
With Tabelle1
sSaveFullName = sPath & .Range("H1").Value & .Range("L1").Value & ".xlsx"
End With
If Dir(sSaveFullName, vbNormal)  "" Then
If MsgBox("Datei mit den Namen bereits vorhanden!" & vbCr & _
"Soll diese ersetzt werden?" & vbCr & _
sSaveFullName, vbYesNo + vbQuestion) = vbNo Then
Exit Sub
End If
End If
Application.DisplayAlerts = False
Application.EnableEvents = False
ThisWorkbook.SaveAs Filename:=sSaveFullName, FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
Application.DisplayAlerts = True
Application.EnableEvents = True
Workbooks.Open sPath & sName
ThisWorkbook.Close False
End Sub

Anzeige
AW: hier mal eine Variante
27.11.2020 15:41:54
Ulrich
Hallo Timo,
vielen Danke für deinen Vorschlag.
Ich denke ich kann es auch ohne Vorlagedatei machen.
Ich habe das Makro jetzt so umfunktioniert, das die Datei unter dem gewünschten Namen gespeichert wird und die Ausgangsdatei wieder geöffnet wird.
Jetzt sind beide Dateien geöffnet. Die gespeicherte Datei könnte aber durchaus direkt geschlossen werden.
Ist es möglich dass das Makro die Abgespeicherte Datei schließt und nur die wieder geöffnete Ausgangsdatei geöffnet geöffnet bleibt?
Gruß Ulli
Anzeige
AW: hier mal eine Variante
27.11.2020 17:12:26
Tino
Hallo,
hier ein Code wenn du nicht aus einer Vorlage arbeiten willst.
Den Code in "DieseArbeitsmappe" brauchst du dann nicht mehr, kannst Du löschen!
Sub SaveSpezial()
Dim sPath$, sName$, sSaveFullName$
With ThisWorkbook
sPath = Left$(.FullName, InStrRev(.FullName, "\"))
sName = Right$(.FullName, Len(.FullName) - InStrRev(.FullName, "\"))
End With
With Tabelle1
sSaveFullName = sPath & .Range("H1").Value & .Range("L1").Value & ".xlsx"
End With
If Dir(sSaveFullName, vbNormal)  "" Then
If MsgBox("Datei mit den Namen bereits vorhanden!" & vbCr & _
"Soll diese ersetzt werden?" & vbCr & _
sSaveFullName, vbYesNo + vbQuestion) = vbNo Then
Exit Sub
End If
End If
Application.DisplayAlerts = False
Application.EnableEvents = False
ThisWorkbook.SaveAs Filename:=sSaveFullName, FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
Application.DisplayAlerts = True
Application.EnableEvents = True
Workbooks.Open sPath & sName
ThisWorkbook.Close False
End Sub
Gruß Tino
Anzeige
AW: hier mal eine Variante
27.11.2020 15:51:48
Ulrich
Bei deinem Code kommt folgender Fehler
Userbild
Gruß Ulli
AW: hier mal eine Variante
27.11.2020 16:42:03
Tino
Hallo,
du müsstest die Datei zuerst als Vorlage speichern.
Durch Workbook_AfterSave wird nach dem speichern der Pfad
zu dieser in der CustomDocumentPropertie FullPath gespeichert.
Evtl. spielt die Groß/Kleinschreibweise noch einen Streich!
Private Sub Workbook_AfterSave(ByVal Success As Boolean)
Dim CP As Object
If LCase(ThisWorkbook.FullName) Like "*.xlt?" Or LCase(ThisWorkbook.FullName) Like "*.xlt" Then
For Each CP In ThisWorkbook.CustomDocumentProperties
If CP.Name = "FullPath" Then CP.Delete: Exit For
Next
ThisWorkbook.CustomDocumentProperties.Add Name:="FullPath", _
LinkToContent:=False, _
Type:=msoPropertyTypeString, _
Value:=ThisWorkbook.FullName
Application.EnableEvents = False
ThisWorkbook.Save
Application.EnableEvents = True
End If
End Sub
Gruß Tino
Anzeige
AW: Datei im gleichen Ordner speichern
27.11.2020 17:04:48
Ulrich
Ich habe eine Lösung gefunden
Dim WB As Workbook
For Each WB In Workbooks
If WB.Name ThisWorkbook.Name And _
WB.Name "Protokoll.xlsm" Then
WB.Close SaveChanges:=True
End If
Next WB
ThisWorkbook.Close SaveChanges:=True
;

Forumthreads zu verwandten Themen

Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Datei im gleichen Ordner speichern mit VBA


Schritt-für-Schritt-Anleitung

Um eine Excel-Datei im gleichen Ordner wie die Vorlage zu speichern, kannst du ein VBA-Makro verwenden. Hier ist eine Schritt-für-Schritt-Anleitung:

  1. Öffne deine Excel-Vorlage und gehe in den VBA-Editor (Alt + F11).

  2. Füge den folgenden Code in das Modul „DieseArbeitsmappe“ ein:

    Option Explicit
    Private Sub Workbook_AfterSave(ByVal Success As Boolean)
       Dim CP As Object
       If ThisWorkbook.FullName Like "*.xlt?" Or ThisWorkbook.FullName Like "*.xlt" Then
           For Each CP In ThisWorkbook.CustomDocumentProperties
               If CP.Name = "FullPath" Then CP.Delete: Exit For
           Next
           ThisWorkbook.CustomDocumentProperties.Add Name:="FullPath", _
           LinkToContent:=False, _
           Type:=msoPropertyTypeString, _
           Value:=ThisWorkbook.FullName
           Application.EnableEvents = False
           ThisWorkbook.Save
           Application.EnableEvents = True
       End If
    End Sub
  3. Füge den folgenden Code in ein neues Modul ein:

    Option Explicit
    Sub SaveSpezial()
       Dim CP As Object, sPath$, sName$, sSaveFullName$
       For Each CP In ThisWorkbook.CustomDocumentProperties
           If CP.Name = "FullPath" Then Exit For
       Next
       If CP Is Nothing Then
           MsgBox "kein Pfad aus Vorlage!", vbExclamation
           Exit Sub
       End If
       sPath = Left$(CP, InStrRev(CP, "\"))
       sName = Right$(CP, Len(CP) - InStrRev(CP, "\"))
       With Tabelle1
           sSaveFullName = sPath & .Range("H1").Value & .Range("L1").Value & ".xlsx"
       End With
       If Dir(sSaveFullName, vbNormal) <> "" Then
           If MsgBox("Datei mit den Namen bereits vorhanden!" & vbCr & _
           "Soll diese ersetzt werden?" & vbCr & _
           sSaveFullName, vbYesNo + vbQuestion) = vbNo Then
               Exit Sub
           End If
       End If
       Application.DisplayAlerts = False
       Application.EnableEvents = False
       ThisWorkbook.SaveAs Filename:=sSaveFullName, FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
       Application.DisplayAlerts = True
       Application.EnableEvents = True
       Workbooks.Open sPath & sName
       ThisWorkbook.Close False
    End Sub
  4. Führe das Makro aus, um die Datei im gleichen Ordner zu speichern.


Häufige Fehler und Lösungen

  • Fehler beim Speichern: Wenn beim Ausführen des Makros ein Fehler auftritt, stelle sicher, dass die Vorlagedatei korrekt als Excel-Vorlage (.xlt oder .xltx) gespeichert ist.
  • Pfad nicht gefunden: Überprüfe, ob der Pfad korrekt in der benutzerdefinierten Dokumenteigenschaft gespeichert wird.
  • Datei existiert bereits: Das Makro fragt dich, ob du die bestehende Datei überschreiben möchtest. Achte darauf, dass du die richtige Auswahl triffst.

Alternative Methoden

Wenn du nicht mit einer Vorlage arbeiten möchtest, kannst du den Code anpassen, um die aktuelle Arbeitsmappe zu speichern. Hier ist ein alternativer Code:

Sub SaveSpezial()
    Dim sPath$, sName$, sSaveFullName$
    With ThisWorkbook
        sPath = Left$(.FullName, InStrRev(.FullName, "\"))
        sName = Right$(.FullName, Len(.FullName) - InStrRev(.FullName, "\"))
    End With
    With Tabelle1
        sSaveFullName = sPath & .Range("H1").Value & .Range("L1").Value & ".xlsx"
    End With
    ' Rest des Codes bleibt gleich
End Sub

Praktische Beispiele

  1. Beispiel mit Namen aus Zellen: Wenn du in Zelle H1 „Protokoll“ und in Zelle L1 „2023“ hast, wird die Datei als „Protokoll2023.xlsx“ gespeichert.
  2. Schließen der gespeicherten Datei: Um die gespeicherte Datei direkt zu schließen, kannst du diesen Code am Ende des Makros hinzufügen:

    Workbooks(sName).Close SaveChanges:=False

Tipps für Profis

  • Verwende Fehlerbehandlungsroutinen: Um sicherzustellen, dass dein Makro auch bei unerwarteten Fehlern stabil bleibt.
  • Testen im Entwicklermodus: Führe dein Makro im Entwicklermodus aus, um mögliche Fehler sofort zu erkennen.
  • Dokumentation des Codes: Kommentiere deinen Code, um die Wartung und Verständlichkeit zu verbessern.

FAQ: Häufige Fragen

1. Wie kann ich sicherstellen, dass das Makro im richtigen Ordner speichert?
Du kannst den Pfad der Vorlagedatei in einer benutzerdefinierten Dokumenteigenschaft speichern, um sicherzustellen, dass das Makro immer im richtigen Ordner speichert.

2. Was ist, wenn ich die Datei nicht als Vorlage speichern kann?
Falls du die Datei nicht als Vorlage speichern kannst, kannst du auch den alternativen Code verwenden, der nicht auf eine Vorlage angewiesen ist.

3. Kann ich das Makro auch in Excel Online verwenden?
VBA-Makros sind nicht in Excel Online verfügbar. Du musst die Desktop-Version von Excel verwenden.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige