Excel 2016 VBA 强制保存到 .xlsm - 如何保存模板?

Posted

技术标签:

【中文标题】Excel 2016 VBA 强制保存到 .xlsm - 如何保存模板?【英文标题】:Excel 2016 VBA force save to .xlsm - How to save the template? 【发布时间】:2016-10-06 16:14:30 【问题描述】:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim fname As Variant, DateTime As String, myInitialFilename As String
On Error GoTo ErrorHandler
SaveAsUI = True
If SaveAsUI Then


    Cancel = True   'Cancel the original SaveAs

    DateTime = "_" & Format(Now(), "yyyy_mm_dd_hhmmss") '= " [yyyy_mm_dd]"
    'DateTime = " [" & Format(Now(), "yyyy_mm_dd  hhmm_ss") & "]" '= " [yyyy_mm_dd  hhmm_ss]" (use instead if you want time in the name)
    myInitialFilename = "Quote" 'EDIT THIS

     'Get filename (with path) for saving
    fname = Application.GetSaveAsFilename(InitialFileName:=myInitialFilename & DateTime, fileFilter:="Excel Marcro-Enabled Workbook (*.xlsm),*.xlsm")
    If fname = False Then Exit Sub  'Exit if user hit Cancel
    Application.EnableEvents = False  'Prevent this event from firing
    ThisWorkbook.SaveAs Filename:=fname, FileFormat:=52
      '52 = xlOpenXMLWorkbookMacroEnabled = xlsm (with macro's in 2007-2010)
    Application.EnableEvents = True  'Re-enable events
End If
Exit Sub
ErrorHandler:
Application.EnableEvents = True
MsgBox "An error occured during save." & Err.Number, vbCritical, "Error"
End Sub`

我已经编写了一些 VBA 代码来强制保存或另存为文件类型 .xlsm,这可以正常工作。但是,由于代码本身强制保存 .xlsm,我似乎无法保存包含 VBA 代码的模板文件。 我有一个没有代码保存的模板,但是一旦我添加了代码,显然我不能再保存为 xltm,因为代码会推动保存为 xslm。寻找保存我的模板的最佳实践解决方案!

谢谢, 凯西 B.

【问题讨论】:

最好包含您的代码。 如果文件类型 .xlt? 【参考方案1】:

文件中的任何更改都会使其始终保存为 xltm,或始终保存为 xlsm。因此,您希望将标志存储在不同的文件中,默认为 false。这样,当你想编辑你的模板时,你可以打开它并保存你的更改,但在正常使用中,它会保存为 .xlsm。

【讨论】:

【参考方案2】:

如果您不使用 true 覆盖 SaveAsUI-Flag 您可以在处理文件时将文件另存为模板。 如果您从模板创建一个新文件 SaveAsUI-Flag 将为真,然后您的代码强制 保留宏。

【讨论】:

以上是关于Excel 2016 VBA 强制保存到 .xlsm - 如何保存模板?的主要内容,如果未能解决你的问题,请参考以下文章

excel 用vba给某个excel.xls文件添加密码 怎么写啊,不要保护工作簿或者工作表,只是加密码而已

保存工作簿 Excel VBA 时删除非法字符

Excel VBA 宏后期绑定

使用 vba 将 xls/csv 文件插入到 access 2007 表中

用VBA代码打开其他excel工作簿(有打开密码的)???

使用VBA批量转换Excel格式,由.xls转换成.xlsx