2011-10-27 233 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中工作,這是當前的優先考慮事項。

感謝所有幫助。