Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Speichern in Ordner per VBA

Forumthread: Speichern in Ordner per VBA

Speichern in Ordner per VBA
02.05.2004 13:38:42
Herbert
Schönen Sonntag allerseits
Ich habe einen Ordner mit Namen 2004 (aktuelle Jahreszahl) dieser wird jeweils zum Jahresanfang automatisch erstellt.
ich will nun meine Datein in diesen speichern
(Dateinamen: fortlaufende Nr und Jahr z.B. 002 04.xls)

Sub speichern()
Dim nr, jahr, jahreszahl, stdPfad
jahreszahl = Year(Now)
stdPfad = "C:\Temp\" & jahreszahl
spname = Range("Nummer").Value          'Wert der Zelle in Variable einlesen
nr = Mid(spname, 1, 3)               'Erste 3 Zeichen in Varilable einlesen
jahr = Mid(spname, 5, 2)             'letzte 2 Zeichen
ActiveWorkbook.SaveAs Filename:=stdPfad & nr & " " & jahr
End Sub

Ergebnis: eine Datei mit Namen 2004002 04.xls im Verzeichnis C:\Temp.
In der Variable jahreszahl ist abder der richtige Pfad abgelegt und ich finde den Fehler nicht.
Bin ich blind oder liegt es am Sonntag??????
Danke für Eure Hilfe im vorraus
Gruß Herbert
Anzeige

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Speichern in Ordner per VBA
02.05.2004 13:44:01
NE
Hi Herbert,
wenn ich das richtig lese:
stdPfad = "C:\Temp\" & jahreszahl
speicherst Du ja unter c:\temp ?? ;;-))
lg Nancy
AW: Speichern in Ordner per VBA
02.05.2004 13:56:54
ypsilon
hi Herbert,
dir fehlt eigentlich nur ein backslash zum glücklich werden
stdPfad = "C:\Temp\" & jahreszahl & "\"
es geht aber glaub ich auch so:

Sub speichern()
ActiveWorkbook.SaveAs Filename:="c:\temp\" & Format(Date, "YYYY") & "\" & Mid(Range("Nummer").Value, 1, 3) & " " & Format(Date, "YY")
End Sub

cu Micha
Anzeige
AW: Speichern in Ordner per VBA Fehler gefunden
02.05.2004 14:02:14
Herbert
Sorry
Es liegt am Sonntag!!! ;.)
ActiveWorkbook.SaveAs Filename:=stdPfad & "\" & nr & " " & jahr
Ein Backslash und schon funzt es.
Herbert
Ergänzung zum Speichern
02.05.2004 14:16:00
Herbert
Danke Euch allen
C:\Temp ist nur zum ausprobieren, der Pfad wird dann angepaßt.
Das Ganze ist ein Ausschnitt aus einer komplexen Anwendung:
Formulat.xlt öffnen, ausfüllen.
Drucken, speichern per Makro.
Jetzt bin ich aber mit meinem VBA am Ende:
Wie fang ich es auf, wenn der Dateiname schon vergeben ist?
Nach meiner Zeile mit dem "fehlenden Backslash" kommt noch:
ActiveWorkbook.SaveAs stdPfad & "\" & nr & " " & jahr
ActiveWorkbook.Close
MsgBox "Das Formular " & nr & "/" & jahr & " wurde gedruckt und gespeichert"
Ist Die Datei vorhanden, kommt die Standardabfrage, ob ich die bestehende Datei überschreiben will. Klicke ich auf nein, kommt die Abfrage Formular1.xls speichern. Dort auf nein, wird die Datei geschlossen. und meine Msgbox kommt.
Wo muß ich ansetzen, um nach der Feststellung - Dateiname ist vorhanden in mein ausgefülltes Formular zurückzukehren , um die Nummer (sprich Dateinamen) ändern zu können?
Gruß Herbert (hoffe es ist verständlich geschrieben)
Anzeige
AW: Ergänzung zum Speichern
02.05.2004 14:38:28
Nepumuk
Hallo Hebert,
frag einfach vor dem speichern ab, ob die Datei schon vorhanden ist. Z.B. mit:
Dir(stdPfad & "\" & nr & " " & jahr & ".xls")
Gruß
Nepumuk
AW: Ergänzung zum Speichern
02.05.2004 14:46:23
Herbert
Hallo Nepumuk
Danke Dir, hab in der Recherche eine code gefunden und abgeändert, bekomme aber auch nach dem Ändern des Dateinamens die Meldung "Auftragsnummer schon vergeben"

If stdPfad & "\" & nr & " " & jahr = "" Then
ActiveWorkbook.SaveAs stdPfad & "\" & nr & " " & jahr
ActiveWorkbook.Close
MsgBox "Das Formular " & nr & "/" & jahr & " wurde gedruckt und gespeichert"
Else
MsgBox "Aufragsnummer ist schon vorhanden!"
Exit Sub
End If
Kannst Du mir nochmal helfen?
Gruß Herbert
Anzeige
AW: Ergänzung zum Speichern
02.05.2004 14:55:49
Nepumuk
Hallo Herbert,
versuch es so:


If Dir(stdPfad & "\" & nr & " " & jahr & ".xls") = "" Then
    ActiveWorkbook.SaveAs stdPfad & "\" & nr & " " & jahr
    ActiveWorkbook.Close
    MsgBox "Das Formular " & nr & "/" & jahr & " wurde gedruckt und gespeichert"
Else
    MsgBox "Aufragsnummer ist schon vorhanden!"
    Exit Sub
End If

     Code eingefügt mit Syntaxhighlighter 2.5

Gruß
Nepumuk
Anzeige
AW: Ergänzung zum Speichern
02.05.2004 14:40:22
ypsilon
hi Herbert,
auch wenn du nix zu meinem anderen vorschlag gesagt hast :-(
kann dein problem (wenn ich dich richtig verstanden habe) nach dem folgenden Muster abgehandelt werden:

If Dir(DeinDateiName) = "" Then
ActiveWorkbook.SaveAs Filename:=DeinDateiName
Else
Stop 'dein sonstiger code eventuell exit Sub
End If
cu Micha
Anzeige
AW: Ergänzung zum Speichern
02.05.2004 14:49:27
Herbert
Hi Micha
Sorry, war mitten im Ausprobieren, Hab gerade auf Nepumuk geantwortet, der auch Deinen Ansatz verfolgt, aber irgendwie funzt das noch nicht. Wenn Du Zeit hast, schau Dir bitte meinen Code in der vorherigen Antwort an, vielleicht weißt Du ne´Lösung.
Gruß Herbert
AW: Ergänzung zum Speichern
02.05.2004 14:53:04
ypsilon
hi Herbert,
achte doch einfach mal genau auf die schreibweise also in diesem fall auf das zusäzliche & ".xls"
das hatte dir Nepumuk auch schon eingebaut !
If Dir(DeinDateiName & ".xls") = "" Then
ActiveWorkbook.SaveAs Filename:=DeinDateiName
Else
Stop 'dein sonstiger code eventuell exit Sub
End If
cu Micha
Anzeige
Jetzt klapps!!! Vielen Dank Euch allen o.T.
02.05.2004 15:03:36
Herbert
;
Anzeige

Infobox / Tutorial

Speichern in Ordner per VBA


Schritt-für-Schritt-Anleitung

Um Dateien in einem bestimmten Ordner per VBA zu speichern, kannst du den folgenden Schritten folgen:

  1. VBA-Editor öffnen: Drücke ALT + F11, um den VBA-Editor in Excel zu öffnen.

  2. Modul erstellen: Klicke im Menü auf Einfügen und wähle Modul.

  3. Code einfügen: Füge den folgenden VBA-Code in das Modul ein:

    Sub speichern()
        Dim nr, jahr, jahreszahl, stdPfad
        jahreszahl = Year(Now)
        stdPfad = "C:\Temp\" & jahreszahl & "\"
        spname = Range("Nummer").Value          'Wert der Zelle in Variable einlesen
        nr = Mid(spname, 1, 3)                 'Erste 3 Zeichen in Variable einlesen
        jahr = Mid(spname, 5, 2)                'letzte 2 Zeichen
        ActiveWorkbook.SaveAs Filename:=stdPfad & nr & " " & jahr & ".xls"
    End Sub
  4. Ordner erstellen: Stelle sicher, dass der Ordner C:\Temp\2004 existiert, oder passe den Pfad an.

  5. Makro ausführen: Führe das Makro aus, um deine Datei zu speichern.


Häufige Fehler und Lösungen

  • Fehlender Backslash: Wenn du einen Fehler erhältst, dass der Pfad nicht gefunden werden kann, überprüfe, ob du einen Backslash \ am Ende von stdPfad hinzugefügt hast. Korrektur:

    stdPfad = "C:\Temp\" & jahreszahl & "\"
  • Dateiname bereits vorhanden: Du kannst überprüfen, ob der Dateiname bereits existiert, bevor du speicherst. Verwende den folgenden Code:

    If Dir(stdPfad & nr & " " & jahr & ".xls") = "" Then
        ActiveWorkbook.SaveAs stdPfad & nr & " " & jahr & ".xls"
    Else
        MsgBox "Auftragsnummer ist schon vorhanden!"
        Exit Sub
    End If

Alternative Methoden

Es gibt auch alternative Ansätze, um das Speichern in einen Ordner zu automatisieren:

  • Einzeiler für das Speichern: Du kannst den gesamten Speichervorgang in einem Einzeiler zusammenfassen:

    ActiveWorkbook.SaveAs Filename:="C:\Temp\" & Format(Date, "YYYY") & "\" & Mid(Range("Nummer").Value, 1, 3) & " " & Format(Date, "YY") & ".xls"
  • Fehlerbehandlung: Implementiere eine Fehlerbehandlung, um unerwartete Fehler abzufangen:

    On Error GoTo Fehlerbehandlung
    ' ... Speichern Code ...
    Exit Sub
    Fehlerbehandlung:
        MsgBox "Ein Fehler ist aufgetreten: " & Err.Description

Praktische Beispiele

Hier sind einige praktische Beispiele, wie du den Speichervorgang anpassen kannst:

  1. Speichern mit Datum:

    ActiveWorkbook.SaveAs Filename:=stdPfad & nr & " " & jahr & "_" & Format(Now, "DDMMYYYY") & ".xls"
  2. Dynamische Ordnerauswahl: Frage den Benutzer nach dem Zielordner:

    Dim ZielOrdner As String
    ZielOrdner = InputBox("Bitte den Zielordner eingeben:")
    ActiveWorkbook.SaveAs Filename:=ZielOrdner & "\" & nr & " " & jahr & ".xls"

Tipps für Profis

  • Verwendung von Konstanten: Definiere Konstanten für häufig verwendete Pfade, um den Code einfacher zu warten:

    Const TempPfad As String = "C:\Temp\"
  • Debugging: Nutze Debug.Print, um Informationen während der Ausführung zu protokollieren:

    Debug.Print "Speichere Datei unter: " & stdPfad & nr & " " & jahr & ".xls"

FAQ: Häufige Fragen

1. Wie kann ich den Speicherort dynamisch ändern?
Du kannst einen Input-Dialog verwenden, um den Benutzer nach dem Speicherort zu fragen.

2. Was passiert, wenn der Dateiname schon existiert?
Du kannst den Code so anpassen, dass er vor dem Speichern überprüft, ob die Datei bereits existiert, und gegebenenfalls eine Warnmeldung anzeigt.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige