2012-08-24 40 views
4

因此,我正在使用XLTM文件,並且我希望用戶確保它們保存爲XLSM。當他們點擊「保存」時,這工作正常,但我發現當他們點擊「另存爲」時,該文件保存爲「* .xlsm.xlsm」。如果確保用戶保存爲XLSM,同時保留文件名爲「filename.xlsm」而不是「filename.xlsm.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是文件類型)。

它可能是我的代碼的結構,所以我需要如何修改它的方向。

+0

當用戶輸入到文本框後使用調試器時,FileNameVal的值是多少? – enderland

+0

將'FileFormat:= ThisWorkbook.FileFormat'更改爲'FileFormat:= 52'時會發生什麼? –

+0

@SiddharthRout這個改變沒有什麼區別。 – engineerchange

回答

5

問題似乎已經存在,因爲模板會在最初實際保存之前將文件命名爲「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 
+0

這非常有幫助,非常感謝。 –

+1

我知道這是一條非常古老的線索,但人們仍然可以找到它。如果您的語言環境設置不是英語(在我的情況下是荷蘭文),則'If FileNameVal ='False'然後'User pressed Cancel'失敗。使用'cstr(False)'而不是''False''來防止這種情況。 – Jzz

相關問題