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

File-Name und File-Pfad

Forumthread: File-Name und File-Pfad

File-Name und File-Pfad
21.07.2003 16:53:25
Kelletshofer Werner
Hallo,
ich bin neu im Forum und benutze es heute auch zum ersten mal. Ich hoffe, irgendjemand kann mir helfen. Meine Frage:
Ich möchte mit einem Makro eine geöffnete xls-Datei mit 'Speichern unter ...' in einen bestimmten Ordner schreiben, wobei sich das 'Speichern unter ...'-Fenster öffnen soll und der Cursor in das Feld springen soll, wo der Datei-Name eingegeben wird.
Ich habe mir diese Vorgehensweise mit dem Makro-Recorder aufzeichnen lassen (siehe unten, was aufgezeichnet wurde), wobei aber dann ein 'fester Datei-Name' aufgezeichnet wurde. Dieser Datei-Name sollte aber veränderbar bzw. beliebig eingebbar sein (d.h. der Cursor sollte einfach in das 'File-Namen-Feld' des 'Speichen unter ...'-Fenster springen). Was müsste ich bei dem aufgezeichneten Makro ergänzen?
Hier das aufgezeichnete Makro:

Sub WUExAbspeichen()
ChDir "\\Phserver\Austausch\Für-Braun-WeKell"
ActiveWorkbook.SaveAs FileName:="\\Phserver\Austausch\Für-Braun-WeKell\Test-WU-123.xls", FileFormat:=xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommend:=False, CreateBackup:=False
ActiveWindows.Close
End Sub

An der Stelle des Makros, wo "\\... 'Pfad-Name' ...\'Datei-Name.xls'" steht, müsste irgend etwas anderes stehen - z.B. als Input - oder aber garnichts und der Cursor steht in der 'File-Name-Zelle' (zur Eingabe eine beliebigen Datei-Namens).

In Erwartung eines Tipps verbleibe ich
Werner Kelletshofer
Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: File-Name und File-Pfad
21.07.2003 18:06:36
Nepumuk
Hallo Werner,
ist halb so wild wie es aussieht. Das Makro das du ansprechen musst heißt "Speichern_unter"

Option Explicit
Private Declare Function GetSaveFileName Lib "comdlg32.dll" Alias "GetSaveFileNameA" (pOpenfilename As OPENFILENAME) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Type OPENFILENAME
lStructSize As Long
hwndOwner As Long
hInstance As Long
lpstrFilter As String
lpstrCustomFilter As String
nMaxCustFilter As Long
nFilterIndex As Long
lpstrFile As String
nMaxFile As Long
lpstrFileTitle As String
nMaxFileTitle As Long
lpstrInitialDir As String
lpstrTitle As String
flags As Long
nFileOffset As Integer
nFileExtension As Integer
lpstrDefExt As String
lCustData As Long
lpfnHook As Long
lpTemplateName As String
End Type
Dim OFName As OPENFILENAME, sPath As String
Public Sub Speichern_unter()
Dim sFile As String
sPath = "\\Phserver\Austausch\Für-Braun-WeKell\"
sFile = ShowSave
On Error Resume Next
If sFile <> "" Then ThisWorkbook.SaveAs sFile & ".xls"
End Sub
Private Function ShowSave() As String
OFName.lStructSize = Len(OFName)
OFName.hwndOwner = FindWindow("xlMain", vbNullString)
OFName.lpstrFilter = "Excel Files (*.xls)" + Chr$(0) + "*.xls"
OFName.lpstrFile = Space$(254)
OFName.nMaxFile = 255
OFName.lpstrFileTitle = Space$(254)
OFName.nMaxFileTitle = 255
OFName.lpstrInitialDir = sPath
OFName.lpstrTitle = "Speichern"
OFName.flags = 0
If GetSaveFileName(OFName) Then
ShowSave = Trim(OFName.lpstrFile)
Else
ShowSave = ""
End If
End Function


Code eingefügt mit: Excel Code Jeanie
Gruß
Nepumuk

Anzeige
AW: File-Name und File-Pfad
21.07.2003 17:43:35
Ivan


hi Werner 
vergiss das erste kleine macro!
ich habe ein viel besseres das funtioniert
sorry habe vergessen im vorigen macro 
Dim Name As String'zu schreiben
Sub SpeichernUnter()
    Dim NewWorkbook As Object
    Dim strSaveName As String, strFileSaveName As String
    Set NewWorkbook = Workbooks.Add
    'Speicher-Unter-Dialog wird angezeigt und der eingestellte
    'Pfad inkl. Dateiname in die Variable
    strFileSaveName = Application.GetSaveAsFilename("Kopie.xls", _
        "Microsoft Excel-Arbeitsmappe (*.xls), *.xls")
    'Wird der Dialog mit "Abbrechen" geschlossen, wird die
    'neue Arbeitsmappe ohne Speichern geschlossen.
    If FileSaveName = False Then
        NewWorkbook.Close savechanges:=False
        Exit Sub
    End If
    'Die Datei wird gespeichert.
    NewWorkbook.SaveAs (strFileSaveName)
    'Der Name der Datei wird aus dem Speicherpfad ausgelesen.
    strSpeichername = NewWorkbook.Name
    ThisWorkbook.Activate
    'Bereich wird kopiert.
    Worksheets(2).Range("A1:A10").Copy
    'Neue Arbeitsmappe wird aktiviert.
    Workbooks(strSpeichername).Activate
    With ActiveWorkbook
        '"Tabelle2" wird aktiviert.
        .Worksheets(2).Activate
        'Zielbereich auswählen
        .Worksheets(2).Range("A1:A10").Select
        'Inhalt der Zwischenablage einfügen
        Selection.PasteSpecial Paste:=xlValues
        'Mappe schließen, Änderungen werden gespeichert.
        .Close savechanges:=True
    End With
    'Objektvariable wird geleert.
    Set NewWorkbook = Nothing
End Sub
gruss
ivan

Anzeige
AW: File-Name und File-Pfad
21.07.2003 17:02:40
Ivan


hi Werner
meinst du das so ??
Sub Dateispeichern()
If ActiveWorkbook.Path = "" Then
Datei = InputBox("Bitte Dateinamen mit Endung .xls eingeben!")
ActiveWorkbook.SaveAs Datei
End If
End Sub
gruss
IVAN

Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Speichern unter in Excel mit VBA: So geht's


Schritt-für-Schritt-Anleitung

Um ein Excel-Dokument mit VBA in einen bestimmten Ordner zu speichern und den Cursor automatisch ins 'Dateiname'-Feld zu setzen, kannst du folgende Schritte ausführen:

  1. Öffne den VBA-Editor: Drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Erstelle ein neues Modul: Klicke mit der rechten Maustaste auf 'VBAProject (DeineDatei.xls)' und wähle 'Einfügen' > 'Modul'.
  3. Füge den folgenden Code ein:
Option Explicit

Private Declare Function GetSaveFileName Lib "comdlg32.dll" Alias "GetSaveFileNameA" (pOpenfilename As OPENFILENAME) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Private Type OPENFILENAME
    lStructSize As Long
    hwndOwner As Long
    hInstance As Long
    lpstrFilter As String
    lpstrCustomFilter As String
    nMaxCustFilter As Long
    nFilterIndex As Long
    lpstrFile As String
    nMaxFile As Long
    lpstrFileTitle As String
    nMaxFileTitle As Long
    lpstrInitialDir As String
    lpstrTitle As String
    flags As Long
    nFileOffset As Integer
    nFileExtension As Integer
    lpstrDefExt As String
    lCustData As Long
    lpfnHook As Long
    lpTemplateName As String
End Type

Public Sub SpeichernUnter()
    Dim OFName As OPENFILENAME
    Dim sFile As String
    Dim sPath As String

    sPath = "C:\Dein\Pfad\"  ' Ändere den Pfad nach Bedarf
    OFName.lStructSize = Len(OFName)
    OFName.hwndOwner = FindWindow("xlMain", vbNullString)
    OFName.lpstrFilter = "Excel Files (*.xls)" & Chr$(0) & "*.xls"
    OFName.lpstrFile = Space$(254)
    OFName.nMaxFile = 255
    OFName.lpstrFileTitle = Space$(254)
    OFName.nMaxFileTitle = 255
    OFName.lpstrInitialDir = sPath
    OFName.lpstrTitle = "Speichern unter"
    OFName.flags = 0

    If GetSaveFileName(OFName) Then
        sFile = Trim(OFName.lpstrFile)
        ThisWorkbook.SaveAs sFile & ".xls"
    End If
End Sub
  1. Führe das Makro aus: Du kannst das Makro über F5 im VBA-Editor oder über dein Excel-Dokument ausführen.

Häufige Fehler und Lösungen

  • Fehler: 'Datei nicht gefunden' beim Speichern

    • Lösung: Vergewissere dich, dass der angegebene Pfad existiert und korrekt eingegeben wurde.
  • Fehler: Makro läuft nicht

    • Lösung: Überprüfe, ob die Makros in Excel aktiviert sind. Gehe zu 'Datei' > 'Optionen' > 'Trust Center' > 'Einstellungen für das Trust Center' > 'Makroeinstellungen' und aktiviere die entsprechenden Optionen.

Alternative Methoden

  1. InputBox-Methode: Du kannst den Benutzer auch einfach nach dem Dateinamen fragen, bevor du das Speichern durchführst:
Sub Dateispeichern()
    Dim Datei As String
    If ActiveWorkbook.Path = "" Then
        Datei = InputBox("Bitte Dateinamen mit Endung .xls eingeben!")
        ActiveWorkbook.SaveAs Datei
    End If
End Sub
  1. Verwendung von Application.GetSaveAsFilename: Diese Methode öffnet das 'Speichern unter'-Fenster und gibt den Namen zurück.

Praktische Beispiele

  • Beispiel 1: Speichern einer Kopie der aktuellen Arbeitsmappe:

    Sub KopieSpeichern()
    Dim SavePath As String
    SavePath = Application.GetSaveAsFilename("Kopie.xls", "Excel Files (*.xls),*.xls")
    If SavePath <> "False" Then
        ThisWorkbook.SaveCopyAs SavePath
    End If
    End Sub
  • Beispiel 2: Speichern mit einem vordefinierten Namen und Pfad:

    Sub SpeichernMitVorgabe()
    ThisWorkbook.SaveAs "C:\MeinOrdner\MeinDateiname.xls"
    End Sub

Tipps für Profis

  • Verwende Dim filename As String für die Deklaration von Variablen, um den Code übersichtlicher zu halten.
  • Fehlerbehandlung: Implementiere On Error Resume Next, um Fehler im Code abzufangen und zu behandeln.
  • Automatisierung: Du kannst den Speicherort dynamisch gestalten, indem du den aktuellen Pfad der Arbeitsmappe abfragst.

FAQ: Häufige Fragen

1. Wie kann ich den Dateinamen ohne Erweiterung erhalten? Um den Dateinamen ohne die Erweiterung zu bekommen, kannst du den Code ThisWorkbook.Name verwenden und die letzten 4 Zeichen entfernen.

2. Was mache ich, wenn das 'Speichern unter'-Fenster nicht erscheint? Stelle sicher, dass die GetSaveFileName-Funktion korrekt deklariert ist und dass dein Excel die entsprechenden Berechtigungen hat.

3. Wie speichere ich im CSV-Format? Ändere einfach die Dateiendung in .csv und passe den Filter in lpstrFilter an.

4. Kann ich den Pfad automatisch setzen? Ja, du kannst den Pfad dynamisch setzen, indem du ActiveWorkbook.Path verwendest, um den aktuellen Arbeitsordner zu ermitteln.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige