【问题标题】:How to save selected worksheet as xlxs如何将选定的工作表另存为 xlsx
【发布时间】:2014-06-26 18:51:59
【问题描述】:

我正在运行 Windows 7 x64 和 Office 2010 x64。我在将文件保存为 .xlsx 时遇到了 VBA 代码问题。如果我将其另存为 .xls,一切都很好,但我需要将其另存为 .xlsx。这是我的代码:

Sub Save_Alignment()

With Application
    .ScreenUpdating = False
    .EnableEvents = False
    .DisplayAlerts = False

End With


Dim Fpath    As String
Dim Fname   As String
Dim FileExtStr As String
Dim FileFormatNum As Long

FileExtStr = ".xls"
FileFormatNum = 56

Fpath = "C:\Users\Me\Documents\"
Fname = "Document " & Format(Date, "yyyy-mm-dd") & FileExtStr


Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets 'SetVersions
    If ws.Name = "CFGBranchAlignment" Then
        Dim wb As Workbook
        Set wb = ws.Application.Workbooks.Add
        ws.Copy Before:=wb.Sheets(1)
        wb.SaveAs Fpath & Fname, FileFormat:=FileFormatNum
        Set wb = Nothing
    End If

Next ws
Workbooks("Document MASTER.xlsm").Activate
Workbooks(Fname).Close SaveChanges:=False

With Application
    .ScreenUpdating = True
    .EnableEvents = True
    .DisplayAlerts = True

End With

End Sub

这将运行良好,直到我将 FileExtStr 更改为 .xlsx 并将 FileFormatNum 更改为 51。 然后代码在 wb.SaveAs Fpath... 行中断。

Fpath 之后我也试过下面这行:

wb.SaveAs path & Fname, Excel.XlFileFormat.xlOpenXMLWorkbook

我正在从启用宏的工作簿中复制此内容(如果有帮助的话)。

这里有代码的基础知识:

Use VBA Macro to Save each Excel Worksheet as Separate Workbook

但除非我将文件保存在旧的 excel 版本中,否则我无法让它运行并出现错误。 尽我所能,所以任何帮助都将不胜感激。

【问题讨论】:

  • 我认为您的工作表模块包含代码并且它会出错,因为代码不会保存为无宏工作簿
  • 在复制工作表之前尝试保存。工作表的模块中有代码吗?
  • @Siphor 打败了我 ;)
  • 我正在使用基于绑定到工作表的私有子自动运行宏。当我检查我正在复制的特定选项卡时,它没有任何代码与该工作表模块相关联。我是否需要从所有工作表中删除所有代码才能正常工作?
  • 不,您不必这样做。我发布了一些可以在我的系统上运行的东西。请在最后尝试一下。

标签: vba excel


【解决方案1】:

要将文件保存为 .xlsx,请更改文件扩展名和 FileformatNum 如下所示

FileExtStr = ".xlsx"
FileFormatNum = 51

【讨论】:

  • @MikeMarshall 如果您明确提供参数名称,则应提供所有参数名称。 wb.SaveAs FileName:=Fpath & Fname, FileFormat:=FileFormatNum
【解决方案2】:

嗨,迈克,试试下面的代码……它工作正常 还要确保您的系统中安装了 2007 或 2010 版本或至少“文件转换” 如果您正在使用 2003 格式,并且如果您没有 2007 或 2010 版本,那么代码将会中断。

Sub Save_Alignment()

With Application
    .ScreenUpdating = False
    .EnableEvents = False
    .DisplayAlerts = False

End With


Dim Fpath    As String
Dim Fname   As String
Dim FileExtStr As String
Dim FileFormatNum As Long

FileExtStr = ".xlsx"
FileFormatNum = 51

Fpath = "C:\"
Fname = "Document " & Format(Date, "yyyy-mm-dd") & FileExtStr


Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets 'SetVersions
    If ws.Name = "CFGBranchAlignment" Then
        Dim wb As Workbook
        Set wb = ws.Application.Workbooks.Add
        ws.Copy Before:=wb.Sheets(1)
        wb.SaveAs Fpath & Fname, FileFormat:=FileFormatNum
        Set wb = Nothing
    End If

Next ws
Workbooks("Document MASTER.xlsm").Activate
Workbooks(Fname).Close SaveChanges:=False

With Application
    .ScreenUpdating = True
    .EnableEvents = True
    .DisplayAlerts = True

End With

End Sub

【讨论】:

    【解决方案3】:

    试试这个。在您的 For Each 子句中进行了一些修改:

    Sub test()
        Dim Fname As String, Fpath As String, FileExtStr As String
    
        FileExtStr = ".xls"
        Fpath = CreateObject("WScript.Shell").specialfolders("MyDocuments") & "\"
        Fname = "Document " & Format(Date, "yyyy-mm-dd") & FileExtStr
    
        Dim ws As Worksheet
        For Each ws In ThisWorkbook.Worksheets
            If ws.Name = "CFGBranchAlignment" Then
                Dim wb As Workbook
                ws.Copy
                Set wb = ActiveWorkbook
                wb.SaveAs Fpath & Fname, xlOpenXMLWorkbook
                Set wb = Nothing
            End If
        Next ws
    End Sub
    

    HTH。顺便说一句,坚持直接使用您的对象。
    Check this out 了解如何避免选择和活动[对象]。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-03
      • 2017-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多