我的电子表格中有一个按钮,可以自动保存当前日期时间的文件。
这是我的代码,不起作用:
Sub save_update()
Dim path As String
Dim proj_id As String
Dim proj_title As String
Dim timeperiod As String
path = Application.ActiveWorkbook.path
proj_id = ActiveWorkbook.Sheets("master").Range("A2").Value
proj_title = ActiveWorkbook.Sheets("master").Range("A3").Value
timeperiod = Format(DateTime.Now, "yyyy_mm_dd hh.mm.ss")
ActiveWorkbook.SaveAs FileName:=path & "\" & timeperiod & " " & proj_id & " " & proj_title & "Internal Tool", FileFormat:=xlOpenXMLWorkbookMacroEnabled
End Sub
当我按下按钮时,文件会保存,但文件扩展名未定义。
具体来说,问题在于在
.
中使用 timeperiod
。用下划线分隔时间可以使其正常工作,但是使用下划线来表示时间很恶心,并且违反了我的格式标准。此外,当同时使用下划线来分隔日期时,也很难破译。
下面的示例正确保存文件:
timeperiod = Format(DateTime.Now, "yyyy_mm_dd hh_mm_ss")
请让我知道我做错了什么并帮助我使用
hh.mm.ss
。
谢谢你。
如果您使用
ActiveWorkbook.SaveAs
(或 Save
),Excel 将检查文件名。如果它不包含扩展名,Excel 将附加您指定的文件类型的默认扩展名。对于 xlOpenXMLWorkbookMacroEnabled
,这将是 .xlsm
,对于 xlOpenXMLWorkbook
,这将是 .xlsx
,您说出它的名字即可。
但是,如果文件名已经包含扩展名,Excel 会保持原样(即使是错误的,您也可以将 Excel 文件命名为“.docx”)。判断文件名中是否已存在扩展名的唯一方法是检查是否存在点。当您用“.”写日期时作为分隔符,Excel(不仅是 Excel)将看到最后一个“.”之后的所有内容。作为扩展。
修复方法很简单(评论中已经提到):手动将扩展名添加到文件名中。我建议使用中间变量:
Dim filename As String
filename = path & "\" & timeperiod & " " & proj_id & " " & proj_title & "Internal Tool" & ".xlsm"
ActiveWorkbook.SaveAs FileName:=filename, FileFormat:=xlOpenXMLWorkbookMacroEnabled