VBA图例和绘图区域大小调整

时间:2014-10-28 14:54:17

标签: excel vba charts resize legend

我有一个Excel图表,可以更改切片器中的选择。 我注意到绘图区域和图例区域会根据所做的选择而改变。

我尝试使用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个参数。

EDIT2: 我已经在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: 我仍然没有解决这个问题的方法。当一个图例项的名称长到适合空间时,就会发生这种情况。当图例中有许多项目适合可用空间时,也会发生这种情况。

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

3 个答案:

答案 0 :(得分:2)

我自己正在解决调整区域的传奇问题。我试过了Portland Runner所建议的,只将.Legend.IncludeInLayout设置为false(因此将传说与他所建议的情节区域分开,也许他输错了?)并且我的情节区域不再调整大小。

答案 1 :(得分:0)

我也遇到了这个问题,并找到了答案。我找到了适合我的修复程序。不知道为什么它确切起作用,但是我执行以下步骤:

  • 设置图例位置
  • 取消停靠图例(legend.includeLayout = false)
  • 将绘图区域调整为我想要的大小
  • 重新停靠图例(legend.includeLayout = True)
  • 设置图例。左位置 然后图例正确定位并对齐。

答案 2 :(得分:0)

我知道这是一个旧的线程,但是由于我遇到了同样的问题并且能够解决它,但是在此线程上并没有真正找到正确的答案,因此我认为发布解决方案会很好。刷新透视图布局非常重要,否则,您将不会在“图表图例”中看到差异。这将调整图例,使其不会与绘图区域重叠。还会增加图表的大小,因此,如果您不希望这样做,则需要使用其他代码。

 Sub AdjustChartLegendActiveSheet()
Dim j
    For j = 1 To ActiveSheet.Shapes.count
        If ActiveSheet.Shapes(j).Type = msoChart Then
            ActiveSheet.Shapes(j).chart.Legend.IncludeInLayout = True
            ActiveSheet.Shapes(j).chart.PivotLayout.PivotTable.PivotCache.Refresh
        End If
    Next j
    End Sub