2014-10-28 349 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