我从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
(只是为了确定),然后,
复制前的工作表:
VisitsByDemo
是要复制的工作表
副本设置:
复制后:
Excel生成否错误消息。
答案 0 :(得分:1)
事实证明PivotCharts
被打破了。
当我尝试编辑数据透视图的数据源时,这就是Excel向我展示的内容:
当我在该页面上重新创建数据透视图,然后编辑数据源时,这就是我所看到的:
不确定发生了什么,但由于我创建了新版本并删除了原件,Worksheet.Copy()
工作得很好。