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

VBA - ActiveWorkbook.SaveAs

Forumthread: VBA - ActiveWorkbook.SaveAs

VBA - ActiveWorkbook.SaveAs
Daniel
Hallo, ich bin am verzweifeln!
Ich habe den Teil Activeworkbook.saveas möglichst variabel gestaltet, so dass die Datei sich automatisch in dem Ordner des aktuellen Monats ablegt über die Zelle "L1". Exisitert dieser jedoch nicht soll eine Schleife gefahren werden über die Msgbox.
Ist der Ordner da, läuft es gut. Datei wird gespeichert. Ist er nicht da erscheint die Message Box. Ich klicke auf ja und bleibe anschließend unter Speichern im folgenden Teil stecken:
ActiveWorkbook.SaveAs ("Desktop\1 - DAILY\" & Range("L1") & ".xlsx")
Anbei der Code
Sub Code
'hier werden nur Arbeitsblätter kopiert, Formeln gelöscht und in eine neue Datei kopiert anschließend soll gespeichert werden'
On Error GoTo Anzeige
ActiveWorkbook.SaveAs ("Desktop\1 - DAILY\" & Range("L1") & ".xlsx")
Exit Sub
Speichern:
On Error GoTo Anzeige
ActiveWorkbook.SaveAs ("Desktop\1 - DAILY\" & Range("L1") & ".xlsx")
Exit Sub
Anzeige:
Dim Response As Integer
' Displays a message box with the yes and no options.
Response = MsgBox(prompt:="Did you create the new folder on the drive for this month where the file can be saved ? 'Yes' or 'No'.", Buttons:=vbYesNo)
' If statement to check if the yes button was selected.
If Response = vbYes Then
GoTo Speichern
Else
' The no button was selected.
ThisWorkbook.Close False
End If
Tausend Dank
Anzeige

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

Betreff
Benutzer
Anzeige
AW: VBA - ActiveWorkbook.SaveAs
09.02.2012 20:46:32
Josef

Hallo Daniel,
lass doch VBA den Ordner für dich anlegen.
' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Private Declare Function MakeSureDirectoryPathExists Lib "imagehlp.dll" (ByVal lpPath As String) As Long

Sub saveMeAs()
  Dim strPath As String
  Dim lngRet As Long
  
  strPath = "Desktop\1 - DAILY\" & Range("L1") & ".xlsx"
  
  lngRet = MakeSureDirectoryPathExists(strPath)
  
  If lngRet <> 0 Then
    ThisWorkbook.SaveAs Filename:=strPath, FileFormat:=51
  Else
    MsgBox "Der Pfad '" & strPath & "' konnte nicht angelegt werden!", vbInformation, "Hinweis"
  End If
  
End Sub



« Gruß Sepp »

Anzeige
AW: VBA - ActiveWorkbook.SaveAs
10.02.2012 08:55:34
Daniel
Moin Sepp,
von der Idee her finde ich das gut. Ist jedoch so, dass mehrere Personen an der Datei arbeiten. Heißt habe ich jemanden dabei der "zufällig" das Datum dreht oder irgendetwas anderes einträgt kreeirt der Makro dann zig Ordner und das will ich vermeiden.
Also falls noch jemand eine Idee hat oder den Fehler sieht wäre ich dankbar
Daniel
Anzeige
AW: VBA - ActiveWorkbook.SaveAs
13.02.2012 15:18:47
fcs
Hallo Daniel,
Fehler 1:
Wenn du nach einem On Error goto SprungAdresse in die Prozedur zurückspringen möchtest, dann muss du mit Resume arbeiten, nicht mit GoTo.
Fehler 2:
In Verbindung mit SaveAs sollte möglichst das vollstänge Verzeichnis und der Dateiname als FileName-Parameter übergeben werden.
Gruß
Franz
Vorschlag für Makroanpassung:
Sub aaTest()
Dim Response As Long
'hier werden nur Arbeitsblätter kopiert, Formeln gelöscht und in eine neue _
Datei kopiert anschließend soll gespeichert werden'
On Error GoTo Anzeige
Speichern:
Application.DisplayAlerts = False
ActiveWorkbook.SaveAs "C:\Users\" & VBA.Environ("Username") _
& "\Desktop\" & Month(Date) & " - DAILY\" & Range("L1").Text & ".xlsx", _
xlOpenXMLWorkbook, addtomru:=True
Application.DisplayAlerts = True
Exit Sub
Anzeige:
' Displays a message box with the yes and no options.
Response = MsgBox(prompt:="Did you create the new folder " & vbLf _
& "C:\Users\" & VBA.Environ("Username") _
& "\Desktop\" & Month(Date) & " - DAILY" & vbLf _
& "on the drive for this month where the file can be saved ? 'Yes' or 'No'.", _
Buttons:=vbYesNo)
' If statement to check if the yes button was selected.
If Response = vbYes Then
Resume Speichern
Else
' The no button was selected.
ThisWorkbook.Close False
End If
End Sub

Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

VBA: ActiveWorkbook.SaveAs richtig nutzen


Schritt-für-Schritt-Anleitung

Um die Methode ActiveWorkbook.SaveAs in VBA effektiv zu nutzen, folge diesen Schritten:

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

  2. Erstelle ein neues Modul: Klicke im Projektfenster mit der rechten Maustaste auf dein Projekt und wähle Einfügen > Modul.

  3. Füge den folgenden Code ein:

    Sub SaveWorkbook()
        Dim strPath As String
        strPath = "C:\Users\" & VBA.Environ("Username") & "\Desktop\1 - DAILY\" & Range("L1").Value & ".xlsx"
    
        On Error GoTo ErrorHandler
        Application.ActiveWorkbook.SaveAs Filename:=strPath, FileFormat:=51
        Exit Sub
    
    ErrorHandler:
        MsgBox "Fehler beim Speichern: " & Err.Description
    End Sub
  4. Ändere den Pfad: Stelle sicher, dass der Pfad existiert oder passe ihn entsprechend an.

  5. Führe das Makro aus: Drücke F5, um das Makro auszuführen. Es wird versuchen, die Arbeitsmappe zu speichern.


Häufige Fehler und Lösungen

  • Fehler 1: Run-time error '76' (Pfad nicht gefunden)

    • Lösung: Überprüfe, ob der Pfad, den Du in ActiveWorkbook.SaveAs angibst, existiert. Du kannst auch eine Funktion hinzufügen, die den Ordner erstellt, falls er nicht vorhanden ist.
  • Fehler 2: Run-time error '1004' (Speichern fehlgeschlagen)

    • Lösung: Stelle sicher, dass das Format korrekt ist. Verwende FileFormat:=51 für .xlsx.
  • Fehler 3: On Error GoTo nicht korrekt verwendet

    • Lösung: Du solltest Resume verwenden, um die Ausführung nach einem Fehler fortzusetzen, nicht GoTo.

Alternative Methoden

Wenn Du auf ActiveWorkbook.SaveAs stoßen, kannst Du auch die Methode ThisWorkbook.SaveAs verwenden, um sicherzustellen, dass die aktive Arbeitsmappe korrekt gespeichert wird, während Du die spezifische Arbeitsmappe, die das Makro enthält, speicherst:

ThisWorkbook.SaveAs Filename:=strPath, FileFormat:=51

Praktische Beispiele

Hier sind einige Beispiele zur Verwendung von ActiveWorkbook.SaveAs:

  1. Speichern mit benutzerdefiniertem Dateinamen:

    Dim customName As String
    customName = "MeinBericht_" & Format(Date, "YYYYMMDD") & ".xlsx"
    ActiveWorkbook.SaveAs Filename:="C:\Users\" & VBA.Environ("Username") & "\Desktop\" & customName, FileFormat:=51
  2. Überprüfen und Erstellen eines Ordners:

    Dim folderPath As String
    folderPath = "C:\Users\" & VBA.Environ("Username") & "\Desktop\1 - DAILY\"
    
    If Dir(folderPath, vbDirectory) = "" Then
        MkDir folderPath
    End If
    ActiveWorkbook.SaveAs Filename:=folderPath & Range("L1").Value & ".xlsx", FileFormat:=51

Tipps für Profis

  • Verwende die Application.DisplayAlerts = False-Eigenschaft, um Warnmeldungen beim Überschreiben von Dateien zu unterdrücken.

  • Nutze FileFormat-Parameter, um das Format der gespeicherten Datei zu steuern (z. B. xlOpenXMLWorkbook für .xlsx).

  • Implementiere eine Fehlerbehandlung, um die Benutzererfahrung zu verbessern und klare Fehlermeldungen anzuzeigen.


FAQ: Häufige Fragen

1. Wie kann ich den Dateipfad dynamisch setzen? Du kannst den Dateipfad dynamisch setzen, indem Du Umgebungsvariablen wie VBA.Environ("Username") verwendest.

2. Was ist der Unterschied zwischen ActiveWorkbook und ThisWorkbook? ActiveWorkbook bezieht sich auf die aktuell aktive Arbeitsmappe, während ThisWorkbook die Arbeitsmappe bezeichnet, in der das Makro gespeichert ist.

3. Wie kann ich sicherstellen, dass ein Ordner existiert, bevor ich speichere? Du kannst die Dir-Funktion verwenden, um zu überprüfen, ob der Ordner existiert, und ihn mit MkDir erstellen, falls dies nicht der Fall ist.

4. Welche Dateiformate kann ich mit SaveAs verwenden? Du kannst verschiedene Dateiformate angeben, z. B. .xlsx (FileFormat 51), .xlsm (FileFormat 52) und viele andere.

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