Как сделать "Сохранить как" в коде 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