因此,我正在使用 XLTM 文件,并且我希望用户确保它们保存为 XLSM。当他们单击“保存”时,效果很好,但我发现当他们单击“另存为”时,文件被保存为“*.xlsm.xlsm”。我对如何确保用户保存为 XLSM,同时将文件名保留为“filename.xlsm”而不是“filename.xlsm.xlsm”有点迷失。
'Action makes sure the user saves as XLSM file type.
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim FileNameVal As String
If SaveAsUI Then
FileNameVal = Application.GetSaveAsFilename(, "Excel Macro-Enabled Workbook (*.xlsm), *.xlsm")
Cancel = True
If FileNameVal = "False" Then 'User pressed cancel
Exit Sub
End If
Application.EnableEvents = False
ThisWorkbook.SaveAs Filename:=FileNameVal & ".xlsm", FileFormat:=ThisWorkbook.FileFormat
Application.EnableEvents = True
End If
End Sub
我认为问题可能是在以下位置写入“.xlsm”:
ThisWorkbook.SaveAs Filename:=FileNameVal & ".xlsm", FileFormat:=ThisWorkbook.FileFormat
但是,如果没有在那里写入“.xlsm”,我发现该文件反而保存为错误的文件后缀。 (例如,如果我的 XLTM 文件名为 Template(File001).xltm,并且用户打开一个新的模板文件,它将另存为 Template(File001)1 (认为“1)1”是文件类型)。
这可能是我的代码的结构,所以我需要指导如何修改它。
该问题似乎已经存在,因为模板在最初实际保存文件之前会将其命名为“Template(1)1”。这改变了 Excel 保存文件的方式,因此对比此初始保存和进一步保存(已包含文件扩展名)的最简单方法是使用 if-then 语句来判断扩展名是否已存在。
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim FileNameVal As String
If SaveAsUI Then
FileNameVal = Application.GetSaveAsFilename(, "Excel Macro-Enabled Workbook (*.xlsm), *.xlsm")
Cancel = True
If FileNameVal = CStr(False) Then 'User pressed cancel
Exit Sub
End If
Application.EnableEvents = False
If Right(ThisWorkbook.Name, 5) <> ".xlsm" Then
ThisWorkbook.SaveAs Filename:=FileNameVal & ".xlsm", FileFormat:=xlOpenXMLWorkbookMacroEnabled
Else
ThisWorkbook.SaveAs Filename:=FileNameVal, FileFormat:=xlOpenXMLWorkbookMacroEnabled
End If
Application.EnableEvents = True
End If
End Sub
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)