当复制由我的宏生成的图表并粘贴为图片时(为了避免在滚动时涉及大量数据点时渲染图表),图表的粘贴图片不会显示相同的数据。
我是excel vba的新手,所以我可能在这里做错了...
在excel中,我尝试右键单击图表并粘贴为图片,并收到相同的问题。我认为我正在使用的数据量(〜11k个数据点)可能会有限制,但是由于我没有收到错误,所以我不确定。
我尝试了不同的方法在excel vba中复制图表(chartarea.copy,chart.copypicture),但没有成功。
这是感兴趣的代码的一部分。...
'This is a small snippet of a much larger range of code, certain ranges/variables are defined earlier
Set localDate = Sheets(1).Range("A2:A" & lastRow)
Set plasmaNaVisRange = plasmaNaRange.SpecialCells(xlCellTypeVisible)
Set plasmaNaChart = Sheets(4).Shapes.AddChart.Chart
'Clears automatic charting done on source sheet
plasmaNaChart.ChartArea.ClearContents
With plasmaNaChart
.ChartType = xlXYScatter
.SetSourceData Source:=Range(localDate, plasmaNaVisRange), PlotBy:=xlColumns
.SetElement (msoElementChartTitleAboveChart)
.ChartTitle.Text = "Plasma"
.Parent.Height = 276
.Parent.Width = 466
.Axes(xlCategory).TickLabels.Orientation = 45
End With
'Forces correct assignment of axes
With plasmaNaChart.SeriesCollection(1)
.XValues = localDate
.Values = plasmaNaVisRange
.Name = "Na"
End With
'Everything appears correct up to this point and chart displays as corrected
plasmaNaChart.ChartArea.Copy
Sheets(4).Range("B36").Select
Sheets(4).Pictures.Paste
plasmaNaChart.Parent.Delete
在原始图表上,我看到了所有带有正确轴的数据点(y轴范围在0-160之间,x轴正确列出了日期)。在粘贴的图表上,我没有Y值,在粘贴它时也确认了同样多的内容,但没有发现y系列中的任何内容。而且我的x轴完全弄乱了,日期范围从1/0/1900到11/21/2036
答案 0 :(得分:0)
解决了!通过设法解决我的问题,我设法绕过了这个问题。这是根本原因...
数据点的数量并不是我最初怀疑的问题,而是我试图绘制的数据范围太复杂了。通过自动筛选器分解了超过1万个数据点,该数据系列是对工作表的引用和PlasmaNaVisRange = PlasmaNaRange.SpecialCells(xlCellTypeVisible)创建的各个范围的巨大混乱。
相反,我坚持使用基本范围(PlasmaNaRange),这是我尝试提取并绘制图表的过滤列。使用chart.PlotVisibleOnly = true方法,我能够首先绘制基本范围的图表,然后仅绘制可见数据点,从而避免图表过于复杂。修改后的代码看起来像这样...
Set localDate = Sheets(1).Range("A2:A" & lastRow)
Set plasmaNaChart = Sheets(4).Shapes.AddChart.Chart
'Clears automatic charting done on source sheet
plasmaNaChart.ChartArea.ClearContents
With plasmaNaChart
.ChartType = xlXYScatter
.SetSourceData Source:=Range(localDate, plasmaNaRange), PlotBy:=xlColumns
.SetElement (msoElementChartTitleAboveChart)
.ChartTitle.Text = "Plasma"
.Parent.Height = 276
.Parent.Width = 466
.PlotVisibleOnly = True 'Saves me from creating a filtered variable with a complex data series
.Axes(xlCategory).TickLabels.Orientation = 45
End With
'Forces correct assignment of axes
With plasmaNaChart.SeriesCollection(1)
.XValues = localDate
.Values = plasmaNaRange
.Name = "Na"
End With