【问题标题】:VBA - save workbook and add today's date to current workbook nameVBA - 保存工作簿并将今天的日期添加到当前工作簿名称
【发布时间】:2018-08-10 15:19:15
【问题描述】:

下面的代码显示了我的保存宏。现在它将当前工作簿保存在具有当前工作簿名称的特定文件路径中。如何在当前工作簿名称中添加今天的日期?所以它以当前工作簿名称和今天的日期最后保存到指定的文件路径?

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

【问题讨论】:

  • 在 activeworkbook.name 后面使用 "& Format(Now, "yyyymmdd")" 您可以根据需要更改日期格式
  • @Srijan 但是如何将它添加到文件名中,使其位于扩展名之前?
  • @Srijan 将给出文件扩展名和日期,因为ActiveWorkBook.Name 包含扩展名
  • 使用 FSO 和 GetBaseName
  • 不要假设扩展名是 4 个字母 (+1 = 5)。而是找到最后一个“。”然后从那里去。没有必要使用 FSO,它是一个更大的锤子。

标签: excel vba excel-2010


【解决方案1】:

首先,.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)

【讨论】:

  • 比我的更优雅:)
  • 不需要声明Dim FileName as String
  • 如何以“xlsx”格式而不是“xlsm”格式保存文件。因为运行代码后保存文件将保存为mxls!但我想在 xlsx 中拥有!?有什么解决办法吗?
  • @Jsmoka 只需指定所需的 XlFileFormat 值即可。在你的情况下使用ActiveWorkbook.SaveAs FileName, xlOpenXMLWorkbook
【解决方案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

【讨论】:

  • 感谢您的信息!
猜你喜欢
  • 2020-03-02
  • 1970-01-01
  • 2021-08-09
  • 2019-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多