簡體   English   中英

VBA 圖例和繪圖區域調整大小

[英]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(因此按照他的建議將圖例與繪圖區域分開,也許他打錯了?)並且我的繪圖區域不再調整大小。

我也遇到了這個問題並找到了這個答案。 我找到了一個對我有用的修復程序。 不知道為什么它會起作用,但我執行以下步驟:

  • 設置圖例位置
  • 取消停靠圖例(legend.includeLayout = false)
  • 將繪圖區域調整為我想要的大小
  • 重新停靠圖例(legend.includeLayout = True)
  • 設置 Legend.Left 位置,然后正確定位和排列圖例。

我知道這是一個舊線程,但由於我遇到了同樣的問題並且能夠解決它,但沒有真正在這個線程上找到正確的答案,我認為發布我的解決方案會很好。 刷新數據透視布局非常重要,否則您將看不到圖表圖例的差異。 這將調整圖例,使其不會與繪圖區域重疊。 它還會增加圖表的大小,因此如果您不想這樣做,則需要使用其他代碼。

 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM