维护文件结构时强制另存为XLSM



所以我使用的是XLTM文件,我希望用户确保它们保存为XLSM。当他们点击"保存"时,这很好,但我发现当他们点击"另存为"时,文件被保存为"*.xlsm.xlsm"。我有点不知道如何确保用户保存为xlsm,同时保持文件名为"filename.xlsm"而不是"filenamexlsm"。

    '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

最新更新