Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen

VBA - ActiveWorkbook.SaveAs | Herbers Excel-Forum


Betrifft: VBA - ActiveWorkbook.SaveAs von: Daniel
Geschrieben am: 09.02.2012 16:39:13

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

  

Betrifft: AW: VBA - ActiveWorkbook.SaveAs von: Josef Ehrensberger
Geschrieben am: 09.02.2012 20:46:32


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 »



  

Betrifft: AW: VBA - ActiveWorkbook.SaveAs von: Daniel
Geschrieben am: 10.02.2012 08:55:34

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


  

Betrifft: AW: VBA - ActiveWorkbook.SaveAs von: fcs
Geschrieben am: 13.02.2012 15:18:47

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