Worksheet.copy()在工作簿中_only_一个工作表失败

时间:2015-04-02 13:24:15

标签: excel vba charts access-vba

我从Access 2010运行VBA代码,打开Excel 2010工作簿(“Master”),然后将指定的工作表从“Master”复制到“Client”工作簿。这一直很好,直到我得到一个特定的工作表,我得到:

  

运行时错误'1004':Worksheet类的复制方法失败

代码行是:

XLMaster.Sheets(SlideRS.Fields(2).Value).Copy _
         After:=XLClinic.Sheets(XLClinic.Sheets.Count)

在这个特定的例子中,这是第二张被复制的表,所以代码第一次工作。这是一个漫长的调试过程的一部分,这行代码对于来自同一“Master”工作簿的十几个其他工作表非常有用。

奇怪的是,当我尝试手动复制时,副本也失败了。我打开了“Master”,右键单击了失败的特定工作表,并尝试复制它,然后只是没有这样做。我可以手动复制工作簿中的其他工作表。

我能识别的唯一区别是这个特定的工作表上有2个数据透视图。复制OK的其他工作表只包含数据,图表(不同类型),甚至是数据透视图和常规图表。这是唯一一个只有 支点图表而不是“常规”图表的图表。不确定这是不是原因,但这是我能识别的唯一可能不同的东西。

对于更大的上下文,代码行来自此循环:

  While Not SlideRS.EOF
    If SlideRS.Fields(1) <> SlideRS.Fields(2) Then                        
     'the worksheet depends on something else, copy it first
     'if the depended upon slide is not in the list of UsedSlides, then add it
      If InStr(1, UsedSlides, SlideRS.Fields(2)) = 0 Then                 
        XLMaster.Sheets(SlideRS.Fields(2).Value).Copy _
                 After:=XLClinic.Sheets(XLClinic.Sheets.Count)
        Set NewSheet = XLClinic.Sheets(XLClinic.Sheets.Count)
        UsedSlides = UsedSlides & "," & NewSheet.Name
        UpdateCharts XLMaster.Sheets(SlideRS.Fields(2).Value), NewSheet
        ProcessDataSheet NewSheet, NewXLName
        Set NewSheet = Nothing
      End If
    End If
    SlideRS.MoveNext
  Wend

同样,这段代码工作得很好,只是这个特殊的工作表不希望被代码或手工复制。

当我尝试在“主”电子表格中手动复制时会发生什么。

在我的“Master”工作簿的一个刚刚打开的副本中,我打开了代码窗口并在即时窗口中执行Application.DisplayAlerts = True(只是为了确定),然后,

复制前的工作表:enter image description here
VisitsByDemo是要复制的工作表

副本设置:enter image description here

复制后:enter image description here

Excel生成错误消息。

1 个答案:

答案 0 :(得分:1)

事实证明PivotCharts被打破了。

当我尝试编辑数据透视图的数据源时,这就是Excel向我展示的内容:enter image description here

当我在该页面上重新创建数据透视图,然后编辑数据源时,这就是我所看到的:

enter image description here

不确定发生了什么,但由于我创建了新版本并删除了原件,Worksheet.Copy()工作得很好。