【发布时间】:2018-05-21 15:38:43
【问题描述】:
我一直在使用宏一次复制多个 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,但是当我尝试复制为位图时问题仍然存在。
当我手动执行相同的操作时,我无法让这些事情发生。真的,我已经能够修复工作表之间的复制/粘贴,但现在系列在复制为位图后会改变大小,我很难解决这个问题。
所以问题是,为什么会发生这种情况,我该如何避免呢?
【问题讨论】:
-
不,不要创建图表然后将旧图表“粘贴”到新图表中;你可以得到各种奇怪的事情发生。不要创建新图表,只需复制旧图表,选择一个单元格并粘贴,即可将图表副本粘贴到活动单元格。
-
我本可以发誓这是我以前查找的方式,我讨厌这个答案,但你说得对,它会做一些奇怪的事情。感谢你的回答。虽然您的方法并不完全有效(将图表粘贴到单元格会出现错误),但将其粘贴到工作表并将目标值设置为我想要的单元格确实效果更好。谢谢。
-
只需使用
Worksheet.Paste。不要使用Selection.Copy Destination语法,它仅适用于范围。