【发布时间】:2012-08-20 03:23:32
【问题描述】:
所以我正在处理一个 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”是文件类型)。
这可能是我的代码结构,所以我需要指导如何修改它。
【问题讨论】:
-
用户输入文本框后使用调试器时
FileNameVal的值是多少? -
将
FileFormat:=ThisWorkbook.FileFormat更改为FileFormat:=52会发生什么? -
@SiddharthRout 与此更改没有区别。
-
@enderland 保存一次后,发现
FileNameVal会自动为我添加后缀。因此,在最初将其保存为“.../My Documents/Template(1).xlsm”后,当我选择另存为并输入“1111”时,它将为FileNameVal提供“1111.xlsm”的值并保存文件为“.../My Documents/1111.xlsm.xlsm” -
ThisWorkbook.SaveAs Filename:=FileNameVal & ".xlsm", FileFormat:=ThisWorkbook.FileFormat将此行更改为ThisWorkbook.SaveAs Filename:=FileNameVal, FileFormat:=52
标签: excel filenames before-save vba