gpt4 book ai didi

excel - 强制另存为 XLSM,同时维护文件结构

转载 作者:行者123 更新时间:2023-12-02 10:17:13 27 4
gpt4 key购买 nike

所以我正在使用 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

关于excel - 强制另存为 XLSM,同时维护文件结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12111491/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com