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