2017-09-26 592 views
0

我有一個xslm文件。在VBA代碼中,我想保存與xlsx和電子郵件相同的文件。我可以將SaveCopy作爲xls文件。如果我嘗試將它保存爲xlsx,它會得到保存,但是當我打開它時,會出現錯誤。這是我正在使用的代碼。請建議EXCEL xlsm另存爲xlsx

ActiveWorkbook.SaveCopyAs Filename:=ActiveWorkbook.Path & "\MyFileName - " & Format(Date, "mm-dd-yyyy") & ".xlsx" 

錯誤,而試圖打開這個文件: Excel無法打開文件...路徑\ MyFileName.xlsx',因爲文件格式或文件擴展名無效。驗證文件沒有被損壞,並且文件擴展名與文件的格式匹配

+1

請記住,如果文件中有VBA宏,則不能使用擴展名XLSX。 – braX

+1

@braX你可以,但重新打開後,所有的宏都不見了。 –

回答

0

SaveCopyAs不會更改文件類型。

您根本無法通過SaveCopyAs將.xlsm保存爲.xlsx。

編輯

一個解決方法是保存,然後在類型改變,而舊的副本將像被刪除副本:

Dim wb As Workbook, pstr As String 

pstr = ActiveWorkbook.Path & "\MyFileName - " & Format(Date, "mm-dd-yyyy") & ".xlsm" 
ActiveWorkbook.SaveCopyAs Filename:=y 

Set wb = Workbooks.Open(pstr) 
wb.SaveAs Left(pstr, Len(pstr) - 1) & "x", 52 
wb.Close False 

Kill pstr 
+0

它如何保存copycopy xls而不是xlsx?請指導是否有辦法將此文件保存爲xlsx,因爲用戶期望它爲xlsx – SilverFish

+0

如果可以使用SaveAs,則可以使用SaveAs – SilverFish

+0

@SilverFish SaveCopyAs'根本不會更改文件類型...(它不能);) –

0

試試這個:

Sub SaveAsXLSX() 
ThisWorkbook.Save 'Optional 
Application.DisplayAlerts = False 
ThisWorkbook.SaveAs ActiveWorkbook.Path & "\MyFileName - " & Format(Date, "mm-dd-yyyy"), 51 '51 = xlsx 
Application.DisplayAlerts = True 
ThisWorkbook.Close 'Optional 
End Sub 

您所需要做的只是SaveAs並將文件格式更改爲51xlsx

如果你想「保存一份副本」 - SaveAs做幾乎相同的事情 - 不同之處是你目前打開的文件成爲保存的文件,但你可以簡單地重新打開舊的,如果你願意和沒有改變。

你實際上想要做的是SaveAs不同的文件類型,所以使用SaveAs

+0

請記住,宏的執行可能會變得複雜,因爲'SaveAs'會將新文件設置爲實際....通過這種方式'ThisWorkbook'在運行時發生變化...如果你在y上工作我們的工作簿,只是要發送一份副本,請記住關閉工作簿並重新打開原始工作簿。 –

+0

@DirkReichel它仍然關閉工作簿,所以看起來該宏將完成運行,儘管它並未「保存」在新文件中。 – user1274820

+0

僅適用於使用某種主工作簿的情況,該工作簿將創建一個非宏副本用於發送,同時仍然與主服務器一起工作...在這種情況下,OP需要重新打開主文件...仍然,如上所述:我們只是看到一行,所以我主要「猜測」這部分(因爲這是我對大多數文件進行工作的方式,所以我不需要每次都搜索最近的文件) –