Excel 如何将xlsm保存为xlsx?

Excel 如何将xlsm保存为xlsx?,excel,vba,xlsx,Excel,Vba,Xlsx,我有一个xslm文件。我想将文件保存为xlsx和电子邮件 我可以将CopyAs保存为xls文件。如果我试图将它保存为xlsx,它确实会被保存,但当我打开它时,它会给出一个错误 ActiveWorkbook.SaveCopyAs Filename:=ActiveWorkbook.Path & "\MyFileName - " & Format(Date, "mm-dd-yyyy") & ".xlsx" Excel

我有一个xslm文件。我想将文件保存为xlsx和电子邮件

我可以将CopyAs保存为xls文件。如果我试图将它保存为xlsx,它确实会被保存,但当我打开它时,它会给出一个错误

ActiveWorkbook.SaveCopyAs Filename:=ActiveWorkbook.Path & "\MyFileName - " & Format(Date, "mm-dd-yyyy") & ".xlsx"
Excel无法打开文件“…path\MyFileName.xlsx”,因为文件格式或文件扩展名无效。验证文件是否未损坏,以及文件扩展名是否与文件格式匹配

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
试试这个:

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
您所需要做的就是另存为并将文件格式更改为51 xlsx

如果你想保存一份副本,SaveAs的作用几乎是一样的,不同的是你当前打开的文件变成了保存的文件,但是如果你愿意,你可以简单地重新打开旧的文件,并且没有任何改变


实际上,您要做的是将其另存为不同的文件类型,因此请使用SaveAs。

I这更具可读性。测试

 Sub SaveXlsmAsXlsx() 
Dim wb As Workbook, Filenamepath As String, Filenameext As String, Filenameonly As String, Filepathonly As String

Application.DisplayAlerts = False
Filenamepath = ActiveWorkbook.FullName
Filenameext = ActiveWorkbook.Name
Filenameonly = Replace(Filenameext, ".xlsm", "")
Filepathonly = Replace(Filenamepath, ".xlsm", "")
Set wb = Workbooks.Open(Filenamepath)
'51 = xlsx
wb.SaveAs Filename:=Filepathonly & "_" & Format(Date, "mm-dd-yyyy"), FileFormat:=51
wb.Close True
'Kill- Best not to kill anyone, you might be sorry
ThisWorkbook.Close SaveChanges:=True
Application.DisplayAlerts = True
End Sub

请记住,如果文件中有VBA宏,则不能使用扩展名XLSX。@braX可以,但重新打开后,所有宏都消失了。如何将COPYAS保存为xls而不是XLSX?请指导是否有办法将此文件保存为xlsx,因为用户希望它是xlsx。如果有,我可以使用SaveAspossible@SilverFishSaveCopyAs根本不会更改文件类型。。。不能,;我可以手动打开xslm文件,并将文件另存为Excel工作簿xlsx。它会提示将其另存为无宏工作簿。但这很好。因为我们必须通过电子邮件发送给用户,所以不需要宏。那么你是说这在编程上是不可能的?@SilverFish只需使用SaveAs而不是SaveCopyAs-然后将.xlsx的参数传递给它。你也可以使用Application.DisplayAlerts=False忽略弹出警告。请记住,当SaveAs将新文件设置为实际值时,宏的执行可能会变得复杂。。。。这样,此工作簿将在运行时更改。。。如果您正在处理工作簿并准备发送副本,请记住关闭工作簿并重新打开原始工作簿。@DirkReichel仍将关闭工作簿,因此宏似乎将完成运行,虽然它没有保存在新文件中。只是为了处理某种主工作簿,它将创建一个非宏副本以供发送,而之后仍然使用主工作簿。。。在这种情况下,OP需要重新打开主文件。。。尽管如此,如前所述:我们只看到一行,所以我主要猜测这一部分,因为这是我处理大多数文件的方式,所以我不需要每次都搜索最新的一行