繁体   English   中英

运行时错误“ 1004”:工作表类的复制方法失败

[英]Run time error '1004': Copy method of worksheet class failed

我想按工作表名称拆分工作簿,但如果在拆分5张纸后抛出上述错误,但我在工作簿中有20张纸。 我使用了下面的代码,并且错误发生在xWs.copy上。

请帮助我修复代码中的错误。 提前致谢。

Sub Splitbook()
'Updateby20140612
Dim xPath As String
xPath = Application.ActiveWorkbook.Path
Application.ScreenUpdating = False
Application.DisplayAlerts = False
For Each xWs In ThisWorkbook.Sheets
    xWs.Copy
    Application.ActiveWorkbook.SaveAs Filename:=xPath & "\" & xWs.Name & ".xlsx"
    Application.ActiveWorkbook.Close False
Next
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub

我相信您的队列中有一个隐藏的工作表。 在下面的代码中,我存储了原始的Worksheet.Visible属性值( XlSheetVisibility Enumeration ),然后使该工作表可见,并最终恢复了原始的可视性状态。 如果开始就已经可见,则没有错误。

我从不建议您在Workbook.SaveAs操作中包括文件扩展名。 实际上,我建议有意省略它,并允许FileFormat参数和XlFileFormat枚举提供正确的文件扩展名。

Sub Splitbook()
    Dim vis As Long, xPath As String, xWs As Worksheet

    xPath = Application.ActiveWorkbook.Path
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False

    For Each xWs In ThisWorkbook.Sheets
        vis = xWs.Visible
        xWs.Visible = xlSheetVisible
        xWs.Copy
        Application.ActiveWorkbook.SaveAs Filename:=xPath & "\" & xWs.Name, _
                                          FileFormat:=xlOpenXMLWorkbook
        Application.ActiveWorkbook.Close False
        xWs.Visible = vis
    Next

    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
End Sub

如果要跳过不可见的工作表,请添加一个条件,如果xWs.Visible属性不是xlSheetVisible ,则不执行“复制,另存为”操作。

如果工作表代码表中有代码(例如, Worksheet_Change事件宏),由于您必须为FalseApplication.DisplayAlerts ,它将被丢弃而无需确认。

您正在拆分的工作簿似乎已被激活,并且由于它包含宏,因此无法保存为xlsx。

尝试For Each xWs In ThisWorkbook.Sheets之前和循环Application.EnableEvents = True之前添加Application.EnableEvents = False

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM