[英]VBA legend and plot area resizing
我有一個 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
有了這個代碼,我假設自動調整大小會消失,但我看到圖例有時仍然與繪圖區域重疊。
是否有永久解決此問題的解決方案?
編輯1:
昨天,我只是為繪圖區域添加了一些參數。 那時似乎奏效了。 但是現在我又試了一次,圖例再次重疊了情節區域。
我將代碼更改為:
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:我仍然沒有解決此問題的方法。 當 1 個圖例項的名稱太長以適應空間時,它已經發生了。 當圖例中有很多項目適合可用空間時,也會發生這種情況。
我認為沒有解決方案。 除非我能以某種方式告訴 excel 最大化圖例中的項目數。 或最大化系列名稱的長度。
我自己在調整繪圖區域大小的圖例時遇到了這個問題。 我嘗試了 Portland Runner 的建議,只將 .Legend.IncludeInLayout 設置為 false(因此按照他的建議將圖例與繪圖區域分開,也許他打錯了?)並且我的繪圖區域不再調整大小。
我也遇到了這個問題並找到了這個答案。 我找到了一個對我有用的修復程序。 不知道為什么它會起作用,但我執行以下步驟:
我知道這是一個舊線程,但由於我遇到了同樣的問題並且能夠解決它,但沒有真正在這個線程上找到正確的答案,我認為發布我的解決方案會很好。 刷新數據透視布局非常重要,否則您將看不到圖表圖例的差異。 這將調整圖例,使其不會與繪圖區域重疊。 它還會增加圖表的大小,因此如果您不想這樣做,則需要使用其他代碼。
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.