如何使用vba编码保存excel文件而不打开它?

我在Excel表格中添加了一个button,并在该button的vba窗口中添加了以下代码。 现在,当我点击这个button,即当我运行这些代码时,它保存了pdf格式的excel表格,它的名字取自单元格H8,并保存为M:\格式。 此外,它还以.xlsx格式在M:\ formats \ excels中保存相同的Excel表格。 但是,这里的问题是,当我运行代码时,它closures了我添加了代码的Excel工作表,并打开了代码保存的文件。 例如,我制作了abc.xlsm excel表格,并在vb窗口中添加了代码,现在xyz被写入单元格h8中的abc.xlsm excel表单中,现在,当我运行代码时,它将closuresabc.xlsm,并显示所有代码xyz.xlsx excel表单。 我希望它应该只保存文件在xlsx格式它必须的位置。 它不应该closures基本文件(在上面的例子中是abc.xlsx),不应该打开保存的文件(在上面的例子中是xyz.xlsx)。 此外,我希望保存的文件(在上面的例子xyz.xlsx)不应该包含任何VBA编码。 换句话说,它应该像基本文件的备份副本(在上例中是abc.xlsx)。 请帮我修改这些代码给他们,如我所愿。 我将非常感激你。 谢谢

Sub ExportAPDF_and_SaveAsXLSX() Dim wsThisWorkSheet As Worksheet Dim objFileSystemObject As New Scripting.FileSystemObject Dim strFileName As String Dim strBasePath As String strBasePath = "M:\formats\" strFileName = Range("H8") On Error GoTo errHandler Set wsThisWorkSheet = ActiveSheet wsThisWorkSheet.ExportAsFixedFormat _ Type:=xlTypePDF, _ Filename:=strBasePath & strFileName, _ Quality:=xlQualityStandard, _ IncludeDocProperties:=True, _ IgnorePrintAreas:=False, _ OpenAfterPublish:=False MsgBox "PDF file has been created." strBasePath = "M:\formats\excels\" strFileName = Range("H8") Application.DisplayAlerts = False strFileName = objFileSystemObject.GetBaseName(strFileName) & ".xlsx" wsThisWorkSheet.SaveAs Filename:=strBasePath & strFileName, FileFormat:=xlOpenXMLWorkbook Application.DisplayAlerts = False MsgBox "Workbook now saved in XLSX format." exitHandler: Exit Sub errHandler: MsgBox "Could not create PDF file" Resume exitHandler End Sub 

这是代码,只有两个小的改变。 两套新的线条在他们面前都有“新”的评论。

也只是整理一下error handling程序。

它的工作方式是这样的:

  1. 将当前工作簿的文件名存储在variables“strMasterWorkbookFilename”

  2. PDF文件是通过“导出”工作表创build的。

  3. Excel工作表然后保存为XLSX。 这有效地“closures”原来的工作簿。

3.1从新的XLSX工作表中删除button(“button8”),并再次保存工作簿。

  1. 然后代码重新打开原始工作簿('strMasterWorkbookFilename')并closures当前工作簿。

注 – 保存为XLSX将从保存的文件中删除macros代码。 macros将保留在主“主”文件中。

 Sub ExportAPDF_and_SaveAsXLSX() Dim wsThisWorkSheet As Worksheet Dim objFileSystemObject As New Scripting.FileSystemObject Dim strFileName As String Dim strBasePath As String ' NEW Dim strMasterWorkbookFilename As String strMasterWorkbookFilename = ThisWorkbook.FullName strBasePath = "M:\formats\" strFileName = Range("H8") On Error GoTo errHandler Set wsThisWorkSheet = ActiveSheet wsThisWorkSheet.ExportAsFixedFormat _ Type:=xlTypePDF, _ Filename:=strBasePath & strFileName, _ Quality:=xlQualityStandard, _ IncludeDocProperties:=True, _ IgnorePrintAreas:=False, _ OpenAfterPublish:=False MsgBox "PDF file has been created." Application.DisplayAlerts = False strFileName = objFileSystemObject.GetBaseName(strFileName) & ".xlsx" wsThisWorkSheet.SaveAs Filename:=strBasePath & strFileName, FileFormat:=xlOpenXMLWorkbook wsThisWorkSheet.Shapes("Button 8").Delete ActiveWorkbook.Save Application.DisplayAlerts = False MsgBox "Workbook now saved in XLSX format." ' NEW Workbooks.Open strMasterWorkbookFilename Workbooks(strFileName).Close SaveChanges:=False exitHandler: Exit Sub errHandler: MsgBox "Error Saving file. The error is " & vbCrLf & Chr(34) & Err.Description & Chr(34) Resume exitHandler End Sub 

感谢您发布这个新的问题。 如果我在第一个问题中继续修改原始代码,那么读取原始文章的任何人都不会有用。