首页 > 解决方案 > Excel VBA 在复制为图像之前更改绘图

问题描述

我一直在使用宏一次复制多个 Excel 图表,以便在报告过程中手动将它们粘贴到 OneNote 中。然而,在切换到 Office 365 之后,一切都变得非常奇怪。

我首先在它们各自的工作表上创建所有这些图表,然后我有一个将所有图表合并到一张工作表上的宏。此宏创建一个新工作表 (rpt_sht),对于我要复制的每个图表,它会在 rpt_sht 页面上创建一个新图表,复制原始图表并将其粘贴到 rpt_sht 页面上新创建的图表中。

' create a new chart on the report page
Set sh = rpt_sht.Shapes.AddChart(, rpt_rng.Left, rpt_rng.Top, w, h)
' select and copy the data from the original chart
' Charts are awful so you gotta do all this so it actually copies
wbk.Worksheets(shts(i)).ChartObjects(chts(i)).Activate
wbk.Worksheets(shts(i)).ChartObjects(chts(i)).Select
For Each srs In wbk.Worksheets(shts(i)).ChartObjects(chts(i)).Chart.SeriesCollection
    names.Add (srs.Name)
Next
DoEvents
wbk.Worksheets(shts(i)).ChartObjects(chts(i)).Copy
DoEvents
' and since charts are still awful, do all this awful stuff to paste it
rpt_sht.Activate
rpt_rng.Activate
sh.Select
sh.Chart.Paste
' so the right series names actually show up
For k = names.Count To 1 Step -1
    sh.Chart.SeriesCollection(k).Name = names(k)
    sh.Chart.SeriesCollection(k).MarkerSize = 3
    names.Remove (k)
Next k

然后,我在 rpt_sht 页面上有几个按钮,允许我对这些图表的不同组合进行分组、复制为位图和取消分组。

With ws.Shapes.Range(names).Group
    .CopyPicture Format:=xlBitmap
    .Ungroup
End With

会出现两个问题:

1)在工作表之间复制图表时,图表图例从使用数据系列名称更改为使用系列 1、系列 2 等...我能够通过在复制之前将名称保存在集合中然后重命名所有内容来解决此问题粘贴后,但我觉得不应该发生这种情况。

2)当我在工作表之间复制或作为位图复制时,标记大小仅针对某些系列随机变化。粘贴到 rpt_sht 后,我​​将它们全部设置为 3,但是当我尝试复制为位图时,问题仍然存在。

当我手动执行相同的操作时,我无法让这些事情发生。真的,我已经能够修复工作表之间的复制/粘贴,但现在系列在复制为位图后会改变大小,我很难解决这个问题。

所以问题是,为什么会发生这种情况,我该如何避免呢?

标签: vbaexcel

解决方案


我能够通过复制图表并将其粘贴到工作表而不是空白图表来解决工作表到工作表的问题。不过,您似乎无法粘贴到单元格中。对于定位,工作表粘贴方法有一个目标参数,我用来指定图表左上角的位置。

wbk.Worksheets(shts(i)).ChartObjects(chts(i)).Activate
wbk.Worksheets(shts(i)).ChartObjects(chts(i)).Select
wbk.Worksheets(shts(i)).ChartObjects(chts(i)).Copy
' paste the chart to the report page in the rpt_rng cell
rpt_sht.Paste rpt_rng
' get access to the chart and set the size
Set co = rpt_sht.ChartObjects(chts(i))
co.Width = w
co.Height = h

完成此操作后,复制到 OneNote 也可以正常工作,所以我想创建一个新图表并将其粘贴到其中一定很奇怪。


推荐阅读