VBA中的命令charts.add
将新的图表对象添加到工作簿。我认为在Excel中点击F11
会完全一样。
问题是,该命令使用该点周围的数据选择工作表和单元格来填充图表。如果没有数据或没有可用数据,则返回空图表。
我的问题是:“如何强制命令提供空图表?”。我打算用VBA代码填充图表。
问题的一个简单答案是创建一个新的空工作表并在该工作表上选择单元格A1,然后创建一个新图表,但这是一个相当丑陋的解决方案。任何有关优雅解决方案的帮助都将受到赞赏。
答案 0 :(得分:5)
尝试添加额外的行,该行会在图表出现后立即删除数据:
Charts.Add
ActiveChart.ChartArea.Clear
编辑替代解决方案,但这将跳回数据表:
'select last cell in the sheet which is usually empty
Dim tmpSel As Range
Set tmpSel = Selection
Cells(Rows.Count, Columns.Count).Select
'add chart
Charts.Add
'back to base sheet and select range previously selected
tmpSel.Parent.Activate
tmpSel.Select
答案 1 :(得分:4)
我有同样的问题。我尝试使用ActiveChart.ChartArea.Clear
属性,导致崩溃。然后我在添加图表后尝试ActiveChart.ChartArea.ClearContents
,它给了我想要的结果,这是一个空白的图表,我可以添加系列。
答案 2 :(得分:2)
我刚刚度过了一段非常艰难的时间来解决这个问题。无论我做了什么,血腥的excel从某个地方获取了一些数据,这真的很烦人。每当我操作图表后,.ChartArea.Clear方法都会导致崩溃(甚至填满新系列)
这是我从一个真正的工作项目(一个片段,对一些用户特定的变量抱歉)的最终解决方案
Dim Chrt as Chart
' This is "the elegant" method
' Parameters of Add do not actually matter, we will specify all details later
Set Chrt = MySheet.ChartObjects.Add(0, 0, 100, 100).Chart
' And here we start to fill the empty (!) Chart with some useful series... :)
With Chrt
' Specifying chart type
.ChartType = xlXYScatterLinesNoMarkers
' Positioning (Page is a range - fragment of my code)
With .Parent
.Top = Page(3, 1).Top
.Left = Page(3, 1).Left
.Width = Page.Width
.Height = (Page.Height - (Page(4, 1).Top - Page(1, 1).Top)) ' / 2
End With
' Adding a new serie
With .SeriesCollection.NewSeries
.Name = "D" & Work.Cells(iFileRow, 2)
.XValues = Range(MySheet.Cells(2, 1), MySheet.Cells(DataEnd, 1))
.Values = Range(MySheet.Cells(2, 10), MySheet.Cells(DataEnd, 10))
.MarkerStyle = -4142
' Formating the series
With .Format.Line
...
答案 3 :(得分:1)
Excel尝试使用所选数据或包含活动单元格的数据块填充全新图表。
在未使用范围的中间选择一个空白单元格。如果没有要绘制的数据,Excel将插入一个空白图表。
答案 4 :(得分:0)
我喜欢ActiveChart.ChartArea.Clear
答案。
当我在Excel 2003中执行宏时,我一直在做以下操作。 它将手动删除所选图表中的所有系列。
Charts.Add
ActiveChart.ChartType = xlXYScatterLinesNoMarkers
ActiveChart.Location Where:=xlLocationAsNewSheet
' manually delete every series that may be in a new chart
On Error GoTo 30
yy = ActiveChart.SeriesCollection.Count
For xx = yy To 1 Step -1
ActiveChart.SeriesCollection(xx).Delete
30 Next xx