2011-10-27 195 views
3

我在业余时间支持Excel VBA应用程序。我是制造工艺工程师,而不是专业的开发人员。Excel 2010 VBA删除图表

应用程序了的图表部分已在Excel 2007中没有问题的工作我公司升级到Excel 2010和同样的应用程序现在已经用在工作表上的图表的交互问题。

问题在于条形图。应用程序在重置时使用下面的代码从图表中删除系列。我这样做是为了在导入/处理新数据的过程中,没有时间向未与最新数据保持一致的用户显示图表。

 'select the histogram chart 
     Sheets(sChartSheet).Select 
     ActiveSheet.ChartObjects("Chart 15").Activate 

     Call PBarCaption("Delete Existing Histogram Series") 
     'remove any existing series 
     For i = 1 To ActiveChart.SeriesCollection.Count 
      ActiveChart.SeriesCollection(1).Delete 
     Next i 

然后创建一个新的系列作为要绘制新的数据从外部数据文件导入:

'add series for histogram 
    ActiveChart.SeriesCollection.NewSeries 
    ActiveChart.SeriesCollection(1).Values = "=HistogramData!$B$5:$B$29" 
    ActiveChart.SeriesCollection(1).XValues = "=HistogramData!$A$5:$A$29" 
    ActiveChart.SeriesCollection(1).charttype = xlColumnClustered 

与2010年的问题是,当偶尔VBA代码是跑,整个酒吧,图表是'迷失'(删除)而不是没有任何定义的系列的图表。

“丢失”的图表似乎当基码的concsecutive执行经由的VBA另一段代码自动创建一系列图表,并将它们复制到PowerPoint的情况下进行的情况发生。

当图表的顺序手动executated,它的工作原理没有问题。当自动运行时,在生成第二个聊天序列时,图表将被删除。

我希望有人熟悉到2010版的变化从Excel 2007中的图表,将能够提供帮助。

感谢,

莱恩

+0

您是否能够确认图表实际上是否被删除,或者图表是否可能变为隐形?当前表格的ChartObjects集合的长度是否实际减少?当我们将现有的具有图表操作代码的工作簿从Excel 2003升级到Excel 2007时,我们发现我们的代码偶尔会导致图表从视图中消失,但它们仍然在后台。如果他们仍然在那里,这可能听起来很奇怪,但是如果你去控制面板并停止然后启动名为“后台打印程序”的服务,它们可能会重新出现。 –

+0

我们发现解决此问题的最佳解决方案是编写代码,将所有图表从头开始重新创建为新鲜的2010年图表,以从Excel 2003版本中删除任何潜在的“损坏”。 –

+0

Michael,谢谢。我希望下周能有一些时间来回复这个。随着图表对象在2010年的宏观录制过程中暴露出来,我可以做到这一点,并删除整个图表,每次从头开始重新创建,以便能够完全控制。我最初想在迁移到2007版本时这样做,但图表对象发生了变化,对象模型未在宏记录中公开,因此有点太过分了。当我到达某处时,我会发布更新。 – NitroLen

回答

2

它可以帮助返工你的代码,这样你就不会激活/选择,然后根据“活动”对象不改变:可以打破,如果一些其他的代码激活一些其他的对象,当你不期待它...

Dim cht As Chart 

Set cht = ActiveWorkbook.Sheets(sChartSheet).ChartObjects("Chart 15").Chart 
Do While cht.SeriesCollection.Count > 0 
    cht.SeriesCollection(1).Delete 
Loop 

With cht.SeriesCollection 
    .NewSeries 
    With .Item(1) 
     .Values = "=HistogramData!$B$5:$B$29" 
     .XValues = "=HistogramData!$A$5:$A$29" 
     .ChartType = xlColumnClustered 
    End With 
End With 
+0

这当然是更好的设计,例如选择隐藏工作表上的图表会抛出运行时异常,所以最好不要选择工作表对象。此外,不关闭屏幕更新,这将帮助您防止屏幕闪烁太多。但是,这不会解决您的问题。 –

+0

一个很好的最佳实践。我会去做。我尽量减少直接工作瓦特/选定的对象,但它工作,屏幕更新已关闭,所以转移到其他任务! – NitroLen

0

我重新格式化与图表的所有交互使用“与”而不是选择。它更好的编程。

不幸的是,没有解决问题。

有关后台打印程序的意见的帮助和它看起来像这个问题是有关与图表的显示屏幕和打印机上的互动。

Reference

正如很多我的组织内的其他用户有不同的打印机,并试图在MS Office的打印驱动程序为默认值时,没有提高restuls另一种解决方案已经被发现。

问题使用VBA代码的工作表复制elemetnts到PowerPoint时出现。被复制的打印机,使用bitmat:

rSlideArea.CopyPicture (2) 

改为复制使用屏幕位图:

rSlideArea.CopyPicture Appearance:=xlScreen, Format:=xlBitmap 

有趣的产生与位图格式的PowerPoint文件比较容易的工作与和较小。

结果是,PowerPoint中的图片与屏幕格式不一样“漂亮”,但现在应用程序在Excel v2010中工作,这是当前的优先考虑事项。

感谢所有帮助。