2014-10-28 350 views
3

我有一个Excel图表,它在切片器中进行选择时发生变化。 我注意到绘图区和图例区根据制作的选择而改变。vba图例和绘图区域调整大小

我试图使用vba修复绘图区域的位置和大小,但这不起作用。

绘图区和图例继续调整大小,导致图例与绘图区重叠。我显然不想要。

我有这样的代码,放置在VBA编辑器的工作表页:

Option Explicit 
Private Sub Chart_Calculate() 

ChartObjects("grafiek 4").Activate 
ActiveChart.PlotArea.Width = 637.783 
ActiveChart.Legend.Left = 716.514 
ActiveChart.Legend.Width = 176.735 
ActiveChart.Legend.Height = 295.334 

End Sub 

有这个代码,我承担了自动调整大小也就不复存在了,但我看到了传说中有时仍然重叠德积区。

有没有永久解决这个问题的解决方案?

EDIT1:

昨天,我只是添加绘图区的几个参数。这似乎工作。但现在我又试了一次,这个传说再次与剧情区重叠。

我改变了代码:

Option Explicit 
Private Sub Chart_Calculate() 

ChartObjects("grafiek 4").Activate 
ActiveChart.PlotArea.Top = 33.102 
ActiveChart.PlotArea.Left = 67.1 
ActiveChart.PlotArea.Width = 637.783 
ActiveChart.Legend.Top = 7 
ActiveChart.Legend.Left = 716.514 
ActiveChart.Legend.Width = 176.735 
ActiveChart.Legend.Height = 329.667 

End Sub 

因此,与2个绘图区更paramters。

编辑2: 我检查了Excel中的图例属性。在“选择图例”下有一个复选框:显示没有重叠绘图区域的图例(我不知道确切的英文文本)。 选中此框,但它确实与绘图区重叠。

为什么不可能实现这个目标?对于地块面积和传说的固定尺寸应该不那么难。

编辑3: 我现在有这个程序在我的工作簿:

Option Explicit 
Private Sub Chart_Calculate() 

ChartObjects("grafiek 4").Activate 
With ActiveChart 
    With .PlotArea 
     .Top = 33.102 
     .Left = 67.1 
     .Width = 637.783 
    End With 
    With .Legend 
     .IncludeInLayout = True 
     .Position = xlLegendPositionRight 
     .AutoScaleFont = False 
     .Font.Size = 8 
     .Top = 5 
     .Left = 706.899 
     .Width = 179.735 
     .Height = 336.681 
    End With 
End With 

End Sub 
Sub kopieergrafiek() 

ActiveSheet.ChartObjects("Grafiek 4").Copy 

End Sub 

(包括在下面我的帖子的评论的建议)

我似乎并没有工作。 worksheet_change事件可能更好吗?

编辑4: 我还没有解决这个问题。它已经发生时,图例项目的名称是1,以适应空间。当图例中有很多项目适合可用空间时,也会发生这种情况。

我认为这没有解决办法。除非我能以某种方式告诉excel最大化图例中的项目数量。或最大化系列名称的长度。

+2

可能不完全是你想要的,但你可以像下面这样将图例与绘图区分开:'ActiveChart.Legend.IncludeInLayout = True'然后像这样设置位置:'ActiveChart.Legend.Position = xlLegendPositionRight' – 2014-10-28 15:03:13

回答

2

我自己在调整剧情区域的图例时遇到了这个问题。我尝试了波特兰亚军提出的建议,只是设置了.Legend.IncludeInLayout为false(因此他将图例与剧情区域分开,可能他犯了一个错字?),我的剧情区域不再调整大小。

+0

当我考虑添加一个创建较短项目名称的列时,我再次使用此模板。那些缩短的名字可以用于图表/系列。 更进一步思考这一点,我认为有可能使用系列名称的公式,即:left(cell,30)将系列名称限制为项目名称的前30个字符。然后,系列名称将永远不会超过30,这将使图例不再调整大小。我不知道这是否可以通过VBA。 – DutchArjo 2016-05-12 10:16:56

+0

我只是改变了我的vba代码。我添加了一个新的变量,现在用在我的数据透视表中显示sku,但现在用一个较短的名称。现在这个变异的所有项目的名称不再是60个字符。这对我来说是最容易得到我想要的结果的。代码简单地使用= left(RC,60)来创建较短的名称,然后所有的公式都以* range()。value = range()。value * – DutchArjo 2016-05-12 11:36:49

+0

的值存储。代码针对每个图表,他们现在的行为,即图例中的条目数量发生变化时,图例不与图表重叠 – whytheq 2017-01-25 14:53:44