Как сделать "Сохранить как" в коде vba, сохраняя мою текущую книгу Excel с меткой даты?

У меня есть книга Excel, которая при нажатии кнопки формы я хочу сохранить копию книги с именем файла, являющимся текущей датой.

Я пытаюсь следующее ActiveWorkbook.SaveAs ("filePathFormFlow To MSExcel" & Left(Now(), 10)) но получив Run-time error '1004': Method 'SaveAs' of object'_Workbook' failed.

может кто-нибудь помочь мне с этим? Я все еще очень новичок в разработке для Excel.

6 ответов


скорее всего, путь, к которому вы пытаетесь получить доступ, не существует. Кажется, вы пытаетесь сохранить в относительном месте, и у вас нет расширения файла в этой строке. Если вам нужно использовать относительные пути, вы можете проанализировать путь из ActiveWorkbook.FullName

изменить: Лучшим синтаксисом также будет

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

самый простой способ использовать эту функцию-начать с "записи макроса". Как только вы начнете запись, сохраните файл в нужном месте с нужным именем, а затем, конечно, установите тип файла, скорее всего, "Excel Macro Enabled Workbook" ~ "XLSM"

остановить запись, и вы можете начать проверку кода.

Я написал код ниже, который позволяет сохранить книгу, используя путь, где файл был первоначально расположен, назвав его как " событие [дата в ячейке "А1"]"

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

скопируйте код в новый модуль, а затем напишите дату в ячейке" A1", например 01-01-2016 -> назначьте sub кнопке и запустите. [Примечание] вам нужно сделать файл сохранения, прежде чем этот скрипт будет работать, потому что новая книга сохраняется в папку автосохранения по умолчанию!


возможно, ваш формат по умолчанию не соответствует расширению файла. Вы должны указать формат файла вместе с именем файла, убедившись, что формат соответствует расширению:

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

OTOH, я не вижу расширения на вашем .Сохранить как имя файла. Возможно, вам нужно предоставить его при выполнении этого программно. Это имеет смысл-не нужно предоставлять расширение из интерфейса GUI удобно, но мы, программисты, должны писать однозначный код. Я предлагаю добавление расширения и соответствующего формата. См.эта страница msdn для списка форматов файлов. Честно говоря, я не узнаю много о descripions.

xlExcel8 = 56-это .формат xls

xlExcel12 = 50-это .файл xlsb формате

xlOpenXMLWorkbook = 51 является .формат xlsx

xlOpenXMLWorkbookMacroEnabled = 52 является .формата xlsm

xlWorkbookDefault является и указан со значением 51, что озадачивает меня, так как я думал, что формат по умолчанию может быть изменен.


Я знаю, что это старый пост, но я искал что-то подобное... Я думаю, ваша проблема заключалась в том, что при использовании Now () выход будет "6/20/2014"... Это проблема для имени файла, поскольку в нем есть"/". Как вы знаете, нельзя использовать определенные символы в имени файла.

Ура


Я успешно использую следующий метод в одном файле

но с такой же ошибки... Только последняя строка придумывает ошибку

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

Я боролся, но ниже работал для меня, наконец!

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