【问题标题】:Reinstate Excel chart default resizing behaviour using VBA使用 VBA 恢复 Excel 图表默认大小调整行为
【发布时间】:2017-05-03 13:11:43
【问题描述】:

我正在寻找一种方法来恢复 Excel 2010 中图表的默认/本机大小调整行为,一旦它被禁用(例如,通过使用 VBA 操作图表)。

现在我无法在任何地方找到关于我所想到的行为的任何信息,所以我假设它需要详细解释。

在 Excel 的 4-5 个单元格中输入并选择随机数值数据,然后插入一个新的聚簇柱形图。您需要查看图表的绘图区域。现在选择图表,并使用以下行获取 PlotArea.Top 值

ActiveChart.PlotArea.Top

如果您还没有触摸图表,这应该返回值 7。现在使用图表的把手之一来调整图表的大小垂直,并再次使用相同的命令行。

activechart.plotarea.top

注意返回的值仍然是 7。现在在 VBA 中设置这个属性为 7。

ActiveChart.PlotArea.Top = 7

再次,抓住其中一个把手,垂直调整图表大小并再次使用以下方法获取 .top 属性:

ActiveChart.PlotArea.Top

注意该值现在是如何变化的。它会小于或大于 7,具体取决于您是减小还是增大图表的大小。

一旦图表的任何元素被手动或使用 VBA 代码移动,它就会失去这个“绝对位置”属性,并在图表调整大小时开始在 ChartArea 内移动。虽然可以使用 .SetElement 重置某些元素,但这不适用于绘图区域。例如,以下命令行不会恢复我所描述的行为。

ActiveChart.SetElement msoElementPlotAreaNone
ActiveChart.SetElement msoElementPlotAreaShow

我使用 VBA 自动调整图表大小,而让绘图区域自行移动使得预测调整图表大小的效果变得更加困难,并导致结果不稳定。

回到这个问题:有没有人知道恢复这种默认行为的方法,无论是针对整个图表,还是至少专门针对 PlotArea?

提前感谢任何可能提供帮助的人!

文森特

【问题讨论】:

  • 我使用 ActiveChart.ClearToMatchStyle 得到的结果好坏参半
  • 感谢您的建议!不幸的是,它在我的情况下不起作用(例如,对于情节区域)
  • 是的...Excel有时就是这样。

标签: vba excel excel-2010 excel-charts


【解决方案1】:

我在手动调整绘图区域大小时遇到​​了这个问题,然后在移动图例时它根本没有调整绘图区域的大小。

我曾尝试将图表另存为模板(在 Excel 2013 中右键单击另存为模板),但这仍然需要手动设置绘图区域。

因此,我建议在保存模板之前保留自动调整大小的行为,因为我知道在手动修改图表后重新设置自动调整大小行为的唯一方法是使用宏

这是我用来恢复自动调整大小行为的宏

Sub Macro1()
'
  ' this selects the chart based on the chart name
  ActiveSheet.ChartObjects("Chart 4").Activate
  ' this selects the plot area
  ActiveChart.PlotArea.Select
  ' this clears any custom formatting such as borders or fill colors
  ActiveChart.PlotArea.ClearFormats
  ' this resets the auto-sizing behavior after plot area manually re-sized
  ActiveChart.PlotArea.Position = xlChartElementPositionAutomatic
End Sub

参考文献

【讨论】:

  • 哇,不敢相信有人终于弄明白了 :) 经过一点测试后,xlChartElementPositionAutomatic 属性看起来与我正在寻找的完全一样。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-21
  • 2021-11-25
  • 1970-01-01
相关资源
最近更新 更多