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

Forumthread: VBA Speichern Unter

VBA Speichern Unter
Stefan
Hallo nochmals
bräuchte den VBA Befehl den ich mit einer Autoform verbinden kann für Speichern unter.
Also ich möchte das sich wenn ich die Datei schliese das
-Fenster öffnet "Speichern unter"
dabei optimaler weise ein
-vorgegebener Speicherpfad schon offen
ist . Der
Wert aus Tabellenblatt1 Feld A1
als Dateiname schon als eintrag vorliegt ich jedoch selber das ok zum abspeichern gebe
LG
Stefan
Anzeige

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

Betreff
Benutzer
Anzeige
Application.Dialogs(xlDialogSaveAs).Show
09.10.2011 15:40:08
Matthias
Hallo

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.Dialogs(xlDialogSaveAs).Show ThisWorkbook.Path & Tabelle1.Range("A1")
End Sub
Gruß Matthias
kl. korrektur
09.10.2011 15:53:43
Matthias
Hallo
kleine Korrektur
Application.Dialogs(xlDialogSaveAs).Show ThisWorkbook.Path & "\" & Tabelle1.Range("A1")
Gruß Matthias
Anzeige
AW: Application.Dialogs(xlDialogSaveAs).Show
09.10.2011 15:55:49
Stefan
Ne das war es nicht so ganz
also der Name der Tabelle "Tabelle1" ist nur ein beipiel gewesen.
Bei mir heisst sie "PEP"
desweiteren soll nicht der Dateiordner "Eigene Dateien " als Name mit vorgeschlagen werden sondern nur der Dateipfad zu Eigene Dateien schon geöffnet sein.
Mir würde es schon reichen wenn
Speichern unter sich öffnet und ich den Dateinamen aus "A3" vorgeschlagen bekomme.
P.S. Falls wichtig: Format in A3 TT.MM.JJ "PEP" mit der Formel =Jetzt()
Anzeige
AW: VBA Speichern Unter
09.10.2011 15:42:07
Daniel
Hi
dazu dieses Makro ins Modul "DieseArbeitsmappe"

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.Dialogs(xlDialogSaveAs).Show "C:\Mein\Pfad\" & Sheets("Tabelle1").Range("A1").Value
End Sub
Gruß, Daniel
AW: VBA Speichern Unter
09.10.2011 15:43:30
Tino
Hallo,
kannst mal diesen Code testen.
kommt als Code in DieseArbeitsmappe

Option Explicit 
 
Private Sub Workbook_BeforeClose(Cancel As Boolean) 
Dim strPfad$, strFileName$ 
Dim sFile As String 
 
'Pfad Vorgabe 
strPfad = "D:\Bilder\" 
'Dateiname (hier aus A1 evtl. Tabelle anpassen) 
strFileName = Sheets("Tabelle1").Range("A1") 
 
sFile = Speichern_Unter(strFileName, strPfad) 
  
If sFile <> "" Then 
    MsgBox "Datei wurde gespeichert unter" & vbCr & sFile, vbInformation 
Else 
    MsgBox "Datei wurde nicht gespeichert unter neuen Namen/Pfad gespeichert", vbExclamation 
End If 
End Sub 
kommt als Code in Modul

Option Explicit 
 
'Function Dialog Speichern unter ********************************************************************** 
Function Speichern_Unter(Optional ByRef sFile_Name As String, Optional ByVal sPath As String) As String 
Dim ArrFileFormat, varIndex, sExtension$, iFileFormat% 
Dim SaveR 
'Extension der Datei 
    sExtension$ = Right$(sFile_Name, Len(sFile_Name) - InStrRev(sFile_Name, ".")) 
      
    ArrFileFormat = Array("xlsx", "xlsm", "xlsb", "xls") 'Datei Versionen 
    varIndex = Application.Match(sExtension, ArrFileFormat, 0) 'Index für Dialog und Angabe 
      
'ist Angabe eine Excel Datei? 
    If IsError(varIndex) Then 
        MsgBox "kein Excel- Datei vbCr & sFile_Name, vbExclamation" 
        Exit Function 
    End If 
      
'Ordner da? 
    If sPath = "" Then sPath = ThisWorkbook.Path 
    If sPath = "" Then sPath = Application.DefaultFilePath 
    If Dir(sPath, vbDirectory) = "" Then 
      MsgBox "Ordner exestiert nicht", vbCritical 
      Exit Function 
    End If 
     
'Wechselt das aktuelle Laufwerk. 
    ChDrive Left$(sPath, 2) 
'Wechselt das aktuelle Verzeichnis oder den aktuellen Ordner 
    ChDir sPath 
  
  
'Dialog aufrufen 
    If Val(Application.Version) > 11 Then 
        sFile_Name = Application.GetSaveAsFilename(sFile_Name, _
            "Excel Arbeitsmappe ohne VBA (*.xlsx),*.xlsx," & _
            "Excel Arbeitsmappe mit Makros (*.xlsm),*.xlsm," & _
            "Excel Binärarbeitsmappe (*.xlsb),*.xlsb," & _
            "Excel 97-2003 Arbeitsmappe (*.xls),*.xls", varIndex, "Speichern unter") 
    ElseIf sExtension$ = "xls" Then 
            sFile_Name = Application.GetSaveAsFilename(sFile_Name, _
            "Excel Arbeitsmappe (*.xls),*.xls", 1, "Speichern unter") 
    Else 
            MsgBox "Extension kann mit dieser Excel- Version nicht gespeichert werden!", vbCritical 
            Exit Function 
    End If 
      
'Dialog abgebrochen! 
    If sFile_Name = CStr(False) Then Exit Function 
  
'nochmal Abfragen fals im Dialog geändert 
    sExtension$ = Right$(sFile_Name, Len(sFile_Name) - InStrRev(sFile_Name, ".")) 
  
'Formatabfrage 
    iFileFormat = File_Format(sExtension$) 
     
    If iFileFormat = 0 Then 
        MsgBox "Auswahl ist kein Excel File!", vbCritical 
        Exit Function 
    End If 
  
'welche Excelversion 
On Error GoTo Error_Handler: 
    If Val(Application.Version) > 11 Then 
        'Datei im richtigen Format speichern 
        ActiveWorkbook.SaveAs sFile_Name, iFileFormat 
    ElseIf iFileFormat = 56 Then 
        'bis Version 11, speichern als *.xls 
        ActiveWorkbook.SaveAs sFile_Name 
    Else 
        MsgBox "Extension kann mit dieser Excel- Version nicht gespeichert werden!", vbCritical 
        Exit Function 
    End If 
Error_Handler: 
    If Err.Number <> 0 Then 
        Speichern_Unter = sFile_Name 
    Else 
        MsgBox Err.Description, vbCritical + vbMsgBoxSetForeground + vbMsgBoxHelpButton, _
              "Error: " & Err.Number, _
              Err.HelpFile, _
              Err.HelpContext 
    End If 
End Function 
  
'Funktion zum ermitteln des Dateiformats ab xl2007 
Private Function File_Format(sExtension$) 
Select Case LCase(sExtension$) 
    Case "xlsx": File_Format = 51 
    Case "xlsm": File_Format = 52 
    Case "xlsb": File_Format = 50 
    Case "xls": File_Format = 56 
End Select 
End Function 
Gruß Tino
Anzeige
eine Zeile noch ändern...
09.10.2011 15:52:39
Tino
Hallo,
mach aus der Zeile

If Err.Number  0 Then

besser diese

If Err.Number = 0 Then 
Gruß Tino
AW: eine Zeile noch ändern...
09.10.2011 15:58:54
Stefan
Ups da will man dem ersten antworten und schon hat man noch mehr vorschläge ich glaube jetzt hab ichs Vielen Dank an alle un LG
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

VBA Speichern Unter - So funktioniert's


Schritt-für-Schritt-Anleitung

Um das Excel VBA Speichern Unter zu nutzen, kannst du folgendes Makro in das Modul „DieseArbeitsmappe“ einfügen. Dieses Makro öffnet den Speichern-unter-Dialog und schlägt einen Dateinamen aus dem Zellinhalt vor.

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Wähle im Projekt-Explorer die Arbeitsmappe aus, in der du das Makro verwenden möchtest.
  3. Klicke mit der rechten Maustaste auf „DieseArbeitsmappe“ und wähle „Code anzeigen“.
  4. Füge folgenden Code ein:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Application.Dialogs(xlDialogSaveAs).Show ThisWorkbook.Path & "\" & Sheets("Tabelle1").Range("A1")
End Sub
  1. Passe den Tabellennamen (hier „Tabelle1“) und den Zellinhalt (hier „A1“) nach Bedarf an.
  2. Schließe den VBA-Editor und teste das Makro, indem du die Arbeitsmappe schließt.

Häufige Fehler und Lösungen

Fehler 1: Der Speichern unter-Dialog öffnet sich nicht.
Lösung: Stelle sicher, dass der Code im richtigen Modul eingefügt wurde. Er sollte in „DieseArbeitsmappe“ sein.

Fehler 2: Der Dateiname wird nicht korrekt angezeigt.
Lösung: Überprüfe, ob der Zellinhalt in der angegebenen Zelle (z.B. A1) vorhanden und korrekt ist.

Fehler 3: Der Pfad ist nicht gültig.
Lösung: Stelle sicher, dass der Pfad, den du im Code angibst, existiert und korrekt ist.


Alternative Methoden

Wenn du eine benutzerdefinierte Funktion für das Speichern unter verwenden möchtest, kannst du den folgenden Code in ein Standardmodul einfügen:

Function Speichern_Unter(Optional ByRef sFile_Name As String, Optional ByVal sPath As String) As String
    ' Dein Code hier
End Function

Diese Funktion kann aufgerufen werden, um eine Datei unter einem bestimmten Namen und Pfad zu speichern.


Praktische Beispiele

Hier ist ein einfaches Beispiel, wie du den Dialog zum Speichern unter aufrufst:

Sub SpeichernUnterBeispiel()
    Dim Dateipfad As String
    Dateipfad = "C:\Dein\Pfad\" & "Dateiname.xlsx"
    Application.Dialogs(xlDialogSaveAs).Show Dateipfad
End Sub

Dieses Makro öffnet den Speichern unter-Dialog und schlägt den angegebenen Dateinamen vor.


Tipps für Profis

  • Nutze Application.GetSaveAsFilename, um den Dialog flexibler zu gestalten. Damit kannst du den Standarddateinamen und -pfad anpassen.
  • Verstecke den VBA-Editor, um deinen Benutzern ein nahtloses Erlebnis zu bieten.
  • Stelle sicher, dass du Fehlerbehandlung in dein Makro einfügst, um unerwartete Probleme zu vermeiden.

FAQ: Häufige Fragen

1. Wie verwende ich den Speichern unter-Dialog in einem Makro?
Du kannst Application.Dialogs(xlDialogSaveAs).Show verwenden, um den Dialog anzuzeigen und einen Dateinamen vorzuschlagen.

2. Kann ich den Dialog anpassen?
Ja, du kannst den Dialog anpassen, indem du verschiedene Parameter in der Funktion GetSaveAsFilename verwendest.

3. Funktioniert das in jeder Excel-Version?
Die meisten VBA-Funktionen sind in Excel 2007 und höher verfügbar. Stelle sicher, dass du die Kompatibilität deiner Makros überprüfst.

4. Was mache ich, wenn der Pfad nicht existiert?
Du kannst im Code überprüfen, ob der Pfad existiert, und eine entsprechende Fehlermeldung anzeigen, bevor der Dialog geöffnet wird.

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