我有一個動態圖表,並且遇到了將數據從中清除的困難。在Excel中刪除圖表中的數據集VBA 2016
據我所知,數據庫指數是累積的。這意味着,如果我從另一張表格中複製了12張乾淨製作的數據庫中的「圖表4」。數據庫的數量= 12 = ActiveSheet.ChartObjects(「Chart 4」)。Chart.SeriesCollection.count。並且這些系列的索引從1到12.
現在,如果刪除1個系列和一個新系列,數據庫的數量將繼續爲12,但索引現在將從1-11和13 。
所以當我試圖刪除它們時,通過計算系列的數量並刪除帶有索引的系列1:ActiveSheet.ChartObjects(「Chart 4」)。Chart.SeriesCollection.count如果系列已經刪除並添加。
因此,爲了克服這個問題,我想「爲每個..在圖4 ..選項:
For Each Series In ActiveSheet.ChartObjects("Chart 4")
'For Each FullSeriesCollection In ActiveSheet.ChartObjects("Chart 4")
ActiveChart.FullSeriesCollection.Delete
Next
對於我得到一個錯誤,指出: 」對象不支持此屬性或方法」
所以我看這個問題在這裏對堆棧溢出,發現由於圖表dataseries的指數的勤奮過程中,計數器需要往下走:
因此,我複製和調整VBA deleting chart series:
Dim iSrs As Long
With ActiveChart
For iSrs = .SeriesCollection.count To 1 Step -1
If InStr(LCase$(.SeriesCollection(iSrs).name), "series") > 0 Then
.SeriesCollection(iSrs).Delete
End If
Next
End With
MsgBox (count_non_existant_series & " and the nr of series still present = " & ActiveSheet.ChartObjects("Chart 4").Chart.SeriesCollection.count)
這不會刪除所有數據系列,爲後來它仍然顯示:數= 27
我嘗試了其他幾個配方與不與「上錯誤刪除所有,(有時無論結果繼續對下一個」,它會刪除它的一半,捨去奇數時),以及完整的代碼是:
'select workbook, worksheet
Workbooks("N.xlsm").Worksheets("day_visual").Activate
Workbooks("N.xlsm").Worksheets("day_visual").range("A1").Select
'select chart
ActiveSheet.ChartObjects("Chart 4").Activate
ActiveSheet.ChartObjects("Chart 4").Select
'remove all series(0 to xx?)
MsgBox (ActiveSheet.ChartObjects("Chart 4").Chart.SeriesCollection.count)
'For Remove = 1 To ActiveSheet.ChartObjects("Chart 4").Chart.SeriesCollection.count
' 'On Error Resume Next
' ActiveChart.FullSeriesCollection(Remove).Select
' Selection.Delete
'
' 'ActiveChart.FullSeriesCollection(Remove).Delete
' 'MsgBox ("hi")
' count_non_existant_series = 1 + count_non_existant_series
'Next Remove
ActiveSheet.ChartObjects("Chart 4").Activate
ActiveSheet.ChartObjects("Chart 4").Select
'For x = Workbooks("N.xlsm").Worksheets("day_visual").ChartObjects("Chart 4").SeriesCollection.count To 2 Step -1
'For x = Workbooks("N.xlsm").Worksheets("day_visual").ChartObjects("Chart 4").FullSeriesCollection.count To 2 Step -1
' ActiveSheet.ChartObjects("Chart 4").SeriesCollection(x).Delete
'Next x
Dim iSrs As Long
With ActiveChart
For iSrs = .SeriesCollection.count To 1 Step -1
If InStr(LCase$(.SeriesCollection(iSrs).name), "series") > 0 Then
.SeriesCollection(iSrs).Delete
End If
Next
End With
'For Each Series In ActiveSheet.ChartObjects("Chart 4")
For Each FullSeriesCollection In ActiveSheet.ChartObjects("Chart 4")
ActiveChart.FullSeriesCollection.Delete
Next
MsgBox (count_non_existant_series & " and the nr of series still present = " & ActiveSheet.ChartObjects("Chart 4").Chart.SeriesCollection.count)
'With ActiveSheet.ChartObjects("Chart 4")
''Do While .SeriesCollection.count >= 1
'.SeriesCollection(.SeriesCollection.count).Delete
'Loop
'End With
Dim add_chartlabels As Long
我如何索引的確切性質的理解是用Excel存儲的欠缺,使我嘗試不當的解決方案。任何人都可以:
- 請告訴我,我對圖表系列索引 的理解是否不正確。
- 解釋爲什麼代碼在「for each」方法上產生運行時483錯誤 ?
- 解釋爲什麼手動迭代 代碼不會刪除所有系列?
- 顯示一個功能代碼, 從圖表中刪除任何和所有系列,同時不刪除 圖表本身?
或者如果您有任何其他貢獻帶來洞察力,您會讓我非常高興。
#3 - 你只是刪除一系列**如果**系列名稱包含子串「系列」'。 –
@ a.t。你有沒有嘗試過下面的答案?任何反饋 ? –