it-swarm.com.de

Wie mache ich ein "Speichern unter" in VBA-Code, Speichern meiner aktuellen Excel-Arbeitsmappe mit Datumsstempel?

Ich habe eine Excel-Arbeitsmappe, die über die Formularschaltfläche Ich möchte eine Kopie der Arbeitsmappe mit dem Dateinamen als aktuellem Datum speichern.

Ich probiere immer wieder die folgende ActiveWorkbook.SaveAs ("\\filePath\FormFlow To MSExcel\" & Left(Now(), 10)) aus, erhalte aber Run-time error '1004': Method 'SaveAs' of object'_Workbook' failed.

Kann mir jemand dabei helfen? Ich bin noch sehr neu in der Entwicklung für Excel.

17

Höchstwahrscheinlich ist der Pfad, auf den Sie zugreifen möchten, nicht vorhanden. Es scheint, dass Sie versuchen, an einem relativen Speicherort zu speichern, und Sie haben keine Dateierweiterung in dieser Zeichenfolge. Wenn Sie relative Pfade verwenden müssen, können Sie den Pfad aus ActiveWorkbook.FullName Analysieren.

EDIT: Bessere Syntax wäre auch

ActiveWorkbook.SaveAs Filename:=myFileName, FileFormat:=xlWorkbookNormal
22
chancea

Die einfachste Möglichkeit, diese Funktion zu verwenden, ist das Aufzeichnen eines Makros. Wenn Sie mit der Aufnahme beginnen, speichern Sie die Datei unter dem gewünschten Namen am gewünschten Speicherort und stellen Sie dann natürlich den Dateityp ein, höchstwahrscheinlich 'Excel Macro Enabled Workbook' ~ 'XLSM'.

Beenden Sie die Aufnahme und Sie können Ihren Code überprüfen.

Ich habe den folgenden Code geschrieben, mit dem Sie eine Arbeitsmappe unter Verwendung des Pfads speichern können, in dem sich die Datei ursprünglich befand, und benannte sie als "Ereignis [Datum in Zelle" A1 "]".

Option Explicit

Sub SaveFile()

Dim fdate As Date
Dim fname As String
Dim path As String

fdate = Range("A1").Value
path = Application.ActiveWorkbook.path

If fdate > 0 Then
    fname = "Event " & fdate
    Application.ActiveWorkbook.SaveAs Filename:=path & "\" & fname, _
        FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
Else
    MsgBox "Chose a date for the event", vbOKOnly
End If

End Sub

Kopieren Sie den Code in ein neues Modul und schreiben Sie dann ein Datum in die Zelle "A1", z. 01.01.2016 -> das Sub einem Button zuordnen und ausführen. [Hinweis] Sie müssen eine Speicherdatei erstellen, bevor dieses Skript ausgeführt werden kann, da eine neue Arbeitsmappe am Standardspeicherort für die automatische Speicherung gespeichert wird!

10

Möglicherweise stimmt Ihr Standardformat nicht mit der Dateierweiterung überein. Sie sollten das Dateiformat zusammen mit dem Dateinamen angeben und sicherstellen, dass das Format mit der Erweiterung übereinstimmt:

With someWorkbook
.SaveAs "C:\someDirector\Awesome.xlsm", fileformat:=xlOpenXMLWorkbookMacroEnabled
End With

OTOH, ich sehe keine Erweiterung Ihres .SaveAs-Dateinamens. Möglicherweise müssen Sie eine angeben, wenn Sie dies programmgesteuert ausführen. Das macht Sinn - es ist praktisch, keine Erweiterung von der GUI-Oberfläche aus angeben zu müssen, aber von uns Programmierern wird erwartet, dass sie eindeutigen Code schreiben. Ich schlage vor, die Erweiterung und das passende Format hinzuzufügen. Siehe diese MSDN-Seite für eine Liste der Dateiformate. Um ehrlich zu sein, erkenne ich nicht viel von den Beschreibungen.

xlExcel8 = 56 ist das XLS-Format

xlExcel12 = 50 ist das XLSB-Format

xlOpenXMLWorkbook = 51 ist das XLSX-Format

xlOpenXMLWorkbookMacroEnabled = 52 ist das XLSM-Format

xlWorkbookDefault wird auch mit einem Wert von 51 aufgeführt, was mich verwundert, da ich dachte, dass das Standardformat geändert werden könnte.

1
riderBill

Ich weiß, dass dies ein alter Beitrag ist, aber ich habe etwas Ähnliches nachgeschlagen ... Ich glaube, Ihr Problem war, dass bei Verwendung von Now () die Ausgabe "20.06.2014" lautet ... Dies ist ein Problem für eine Datei Name wie er "/" enthält. Wie Sie vielleicht wissen, können Sie bestimmte Symbole in einem Dateinamen nicht verwenden.

Prost

0
Corey

Ich verwende erfolgreich die folgende Methode in einer Datei,

Aber kommen Sie mit genau dem gleichen Fehler wieder ... Nur die letzte Zeile mit Fehler kommen

Newpath = Mid(ThisWorkbook.FullName, 1, _
 Len(ThisWorkbook.FullName) - Len(ThisWorkbook.Name)) & "\" & "ABC - " & Format(Date, "dd-mm-yyyy") & ".xlsm"
ThisWorkbook.SaveAs (Newpath)
0
Isu

Ich hatte Mühe, aber das Folgende funktionierte endlich für mich!

Dim WB As Workbook

Set WB = Workbooks.Open("\\users\path\Desktop\test.xlsx")

WB.SaveAs fileName:="\\users\path\Desktop\test.xls", _
        FileFormat:=xlExcel8, Password:="", WriteResPassword:="", _
        ReadOnlyRecommended:=False, CreateBackup:=False
0
Pedro Luque