Как сделать "Сохранить как" в коде vba, сохраняя мою текущую книгу Excel с помощью datestamp?
У меня есть книга Excel, которая при нажатии кнопки формы я хочу сохранить копию книги с именем файла, являющимся текущей датой.
Я продолжаю пробовать следующее
ActiveWorkbook.SaveAs ("\\filePath\FormFlow To MSExcel\" & Left(Now(), 10))
, но я получаю Run-time error '1004': Method 'SaveAs' of object'_Workbook' failed.
Может ли кто-нибудь помочь мне с этим? Я все еще очень новичок в разработке для Excel.
Ответы
Ответ 1
Скорее всего, путь, к которому вы пытаетесь получить доступ, не существует. Кажется, вы пытаетесь сохранить в относительном местоположении, и у вас нет расширения файла в этой строке. Если вам нужно использовать относительные пути, вы можете проанализировать путь от ActiveWorkbook.FullName
EDIT:
Лучшим синтаксисом будет также
ActiveWorkbook.SaveAs Filename:=myFileName, FileFormat:=xlWorkbookNormal
Ответ 2
Самый простой способ использовать эту функцию - начать с "Запись макроса". После того, как вы начнете запись, сохраните файл в нужное вам место с нужным именем, а затем, конечно же, установите тип файла, скорее всего, "Excel Macro Enabled Workbook" ~ "XLSM"
Остановите запись, и вы можете начать проверку своего кода.
Я написал приведенный ниже код, который позволяет вам сохранить книгу, используя путь, из-за которого файл был изначально расположен, назвав его "Событие [дата в ячейке" 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
Скопируйте код в новый модуль и затем напишите дату в ячейке "A1", например. 01-01-2016 → назначьте кнопку кнопке и запустите. [Примечание] вам нужно создать файл сохранения до того, как этот script будет работать, потому что новая книга сохраняется в автосохранении по умолчанию!
Ответ 3
Может быть, ваш формат по умолчанию не соответствует расширению файла. Вы должны указать формат файла вместе с именем файла, убедившись, что формат соответствует расширению:
With someWorkbook
.SaveAs "C:\someDirector\Awesome.xlsm", fileformat:=xlOpenXMLWorkbookMacroEnabled
End With
OTOH, я не вижу расширения вашего имени .SaveAs. Может быть, вам нужно поставить его, когда делаете это программно. Это имеет смысл - не нужно предоставлять расширение из интерфейса GUI, но мы, программисты, должны писать однозначный код. Я предлагаю добавить расширение и соответствующий формат. См. эту страницу msdn для списка форматов файлов. Честно говоря, я не признаю много описаний.
xlExcel8 = 56 - это формат .xls
xlExcel12 = 50 - это формат .xlsb
xlOpenXMLWorkbook = 51 - это формат .xlsx
xlOpenXMLWorkbookMacroEnabled = 52 - это формат .xlsm
xlWorkbookDefault также отображается со значением 51, что меня озадачивает, так как я думал, что формат по умолчанию может быть изменен.
Ответ 4
Я знаю, что это старый пост, но я искал что-то подобное...
Я думаю, ваша проблема в том, что при использовании Now() выход будет "6/20/2014"... Это проблема для имени файла, поскольку в нем есть "/". Как вы знаете, вы не можете использовать определенные символы в имени файла.
Приветствия
Ответ 5
Я успешно использую следующий метод в одном файле,
Но придумайте точно такую же ошибку снова...
Только последняя строка содержит ошибку
Newpath = Mid(ThisWorkbook.FullName, 1, _
Len(ThisWorkbook.FullName) - Len(ThisWorkbook.Name)) & "\" & "ABC - " & Format(Date, "dd-mm-yyyy") & ".xlsm"
ThisWorkbook.SaveAs (Newpath)