2017-09-26 1509 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需要重新打开主文件...仍然,如上所述:我们只是看到一行,所以我主要“猜测”这部分(因为这是我对大多数文件进行工作的方式,所以我不需要每次都搜索最近的文件) –