在VBA代码中,我使用带有过滤数据的工作表创建图表。
当我去创建第二个图表(重新过滤数据,创建新图表)时,两个图表都采用第二个图表的值。
如何锁定第一张图表的图表数据,以防止在创建第二张图表时被覆盖?
VBA code
1. Filter data for graph 1
2. Create graph 1
3. Filter data for graph 2
4. Create graph 2
Graph 1 and graph 2 now both have graph 2's data.
现在我试图做的是
5. Cut the chart and using "PasteSpecial" as an image.
Sheets("Sheet2").PasteSpecial Format:="Picture (Enhanced Metafile)", Link:=False, DisplayAsIcon:=False
它在我的计算机上工作,但无论何时在其他任何地方运行都会产生错误。
合十
答案 0 :(得分:3)
ulvund:您是否考虑将图表导出为图像,然后在Excel中重新导入,而不是手动将其复制并粘贴为图像?以下适用于我:)
实施例
Option Explicit
Sub Sample()
Dim FileNM As String
FileNM = "C:\Sample.jpg"
'~~> Export the chart as a jpg
Sheets("Sheet1").ChartObjects(1).Chart.Export Filename:=FileNM, FilterName:="jpg"
DoEvents
'~~> Import the saved image in Sheet 2
Sheets("Sheet2").Pictures.Insert FileNM
End Sub
答案 1 :(得分:1)
获得所需行为的最简单方法是在图表创建方法中添加代码,将图表的源数据移动到隐藏的实用程序电子表格或类似内容,而不是直接引用“工作”范围。
例如,首先将数据复制到您创建的名为“ChartData”的隐藏电子表格中,然后更改图表创建代码以查看该工作表而不是现在查看的位置。然后,您可以在某个配置表上保留计数器,或使用电子表格形状集合(搜索ActiveSheet.Shapes
类型为Chart
的对象)来确定已创建的图表数量并设置后续图表在“ChartData”上引用它们各自的列,这样就不会有重叠。
但是,如果使用形状集合,请记住清理ChartData表以使数据和图表集合保持同步。
但是,您解决了这个问题,关键是让图表引用自己的数据系列,而不是共享源。
答案 2 :(得分:0)
创建第一个图表后,可以执行以下操作将其数据从单元格值转换为数组。如果你有太多的数据点,这将会破坏。
With ActiveChart.SeriesCollection(1)
' must repeat for all series in the chart
.Name = .Name
.Values = .Values
.XValues = .XValues
End With
有关详细信息(尤其是如何让它在断开前接受更多积分),请在我的网站上查看Delink Chart Data