Excel 2010 VBA删除图表

我在业余时间支持Excel 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 

然后创build新的系列,以便从外部数据文件导入要绘制的新数据:

  '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代码运行时,整个条形图被“丢失”(删除),而不是没有任何定义的系列的图表。

当基本代码的连续执行通过VBA代码的另一部分执行时,“丢失”图似乎会发生,VBA代码会自动创build一系列图表并将其复制到PowerPoint。

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

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

谢谢,

莱恩

这可能有助于重做你的代码,所以你没有激活/select,然后根据“主动”对象不变:这可以打破,如果其他代码激活一些其他的对象,当你不期望它…

 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 

我重新格式化了与图表的所有交互,以使用“with”而不是select。 它更好的编程。

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

有关打印后台处理程序的意见是有帮助的,它看起来像问题是与图表如何出现在屏幕上和打印机的交互。

参考

由于我组织中的许多其他用户使用不同的打印机,因此如果默认情况下尝试使用MS Office打印驱动程序,则不会改进其他解决scheme。

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

 rSlideArea.CopyPicture (2) 

更改为复制为屏幕位图使用:

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

有趣的是,带位图格式的PowerPoint文件更容易处理,而且更小。

结果是PowerPoint中的图片不像屏幕格式那样“漂亮”,而是现在在Excel v2010中的应用程序,这是当前的优先事项。

感谢所有的帮助。