Vba - сохранить книгу и добавить сегодняшнюю дату к текущему имени книги

В приведенном ниже коде показан мой макрос сохранения. Прямо сейчас он сохраняет текущую книгу в определенном пути к файлу с текущим именем книги. Как добавить сегодняшнюю дату к имени текущей книги? Значит, он сохраняет в указанный путь к файлу с текущим именем книги и сегодняшней датой в конце?

Sub Save_Workbook()
    ActiveWorkbook.SaveAs "H:\HR\Cole G\Timehseet Test Path\" & ActiveWorkbook.Name
End Sub

используйте "& Format (Now," yyyymmdd ")" после activeworkbook.name. Вы можете изменить формат даты в соответствии с вашими потребностями.

Srijan 10.08.2018 17:22

@Srijan Но как мне добавить его к имени файла, чтобы оно было перед расширением?

Cameron Cole 10.08.2018 17:26

@Srijan, который даст расширение файла, а затем дату, поскольку ActiveWorkBook.Name включает расширение

urdearboy 10.08.2018 17:26

так вы говорите, что в Activeworkbook.Nameуже есть предыдущая дата?

Marcucciboy2 10.08.2018 17:28

ActiveWorkbook.SaveAs Имя файла: = left $ (ActiveWorkbook.Name, Len (ActiveWorkbook.Name) - 5) & Format (Теперь «yyyymmdd») & «.xlsm» и, например, если вы не уверены в длине расширения. xlsx или .xls, используйте InStr или InStrRev вместо Len.

Srijan 10.08.2018 17:32

Используйте FSO и GetBaseName

BigBen 10.08.2018 17:33

Не думайте, что расширение состоит из 4 букв (+1 = 5). Вместо этого найдите последний "." и идти оттуда. Нет необходимости использовать FSO, это гораздо больший молоток, чем требуется.

Profex 10.08.2018 17:48
0
7
9 465
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Это должно быть надежным независимо от расширения файла (даже если расширение файла отсутствует!), Если вы используете общие типы файлов Excel. Если вы открываете странные файлы .HTML, возможно, потребуется дополнительная настройка.

Sub Save_Workbook()
    Dim fileNameWithoutExtension as String
    fileNameWithoutExtension = getFileNameWithoutExtension(ActiveWorkbook)
    ActiveWorkbook.SaveAs "H:\HR\Cole G\Timehseet Test Path\" & fileNameWithoutExtension & Format(Date, "YYYY-MM-DD"), FileFormat:=ActiveWorkbook.FileFormat
End Sub

Function getFileNameWithoutExtension(wb As Workbook)
Dim baseName As String

If (wb.Name = wb.FullName) Then
    ' This handles files that have not been saved, which won't have an extension
    baseName = wb.Name
    GoTo EarlyExit
End If

Select Case wb.FileFormat
    Case xlOpenXMLAddIn, xlOpenXMLStrictWorkbook, xlOpenXMLTemplate, xlOpenXMLTemplateMacroEnabled, _
        xlOpenXMLWorkbook, xlWorkbookDefault
        ' These all have a 4-character extension
        baseName = Left(wb.Name, Len(wb.Name) - 5)
    Case Else
        ' almost every other file type is a 3-character extension,
        ' but modify if needed based on this enumeration:
        ' https://msdn.microsoft.com/en-us/vba/excel-vba/articles/xlfileformat-enumeration-excel
        baseName = Left(wb.Name, Len(wb.Name) - 4)
End Select

EarlyExit:
getFileNameWithoutExtension = baseName

End Function

Спасибо за информацию!

Cameron Cole 10.08.2018 18:02
Ответ принят как подходящий

Во-первых, .Name может включать или не включать расширение файла, в зависимости от того, был ли файл сохранен или нет. (например, "Test.xls" или "Book2")

Const Path = "H:\HR\Cole G\Timehseet Test Path\"
Dim Pos as Long

Pos = InStrRev(ActiveWorkbook.Name, ".") - 1
' If there wasn't a ".", then the file doesn't have an extension and Pos = -1
If Pos < 0 then Pos = Len(ActiveWorkbook.Name)
' Now put everything together, including the file extension...
ActiveWorkbook.SaveAs Path & Left(ActiveWorkbook.Name,Pos) & Format(Now, "yyyy-mm-dd") & Mid(ActiveWorkbook.Name,Pos+1)

Элегантнее моего :)

David Zemens 10.08.2018 17:58

Dim FileName as String декларировать не нужно

Junaid 16.06.2019 17:45

Другие вопросы по теме