我有一个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最大化图例中的项目数量。或者最大化系列名称的长度。
答案 0 :(得分:2)
我自己正在解决调整区域的传奇问题。我试过了Portland Runner所建议的,只将.Legend.IncludeInLayout设置为false(因此将传说与他所建议的情节区域分开,也许他输错了?)并且我的情节区域不再调整大小。
答案 1 :(得分:0)
我也遇到了这个问题,并找到了答案。我找到了适合我的修复程序。不知道为什么它确切起作用,但是我执行以下步骤:
答案 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