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

나는에 코드를 변경했습니다.

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 개의 이름이 공간에 맞게 길어지면 이미 발생합니다. 그리고 전설에있는 많은 항목을 사용할 수있는 공간에 맞춰야 할 때도 발생합니다.

여기에는 해결책이 없다고 생각합니다. 내가 어떻게 든 전설에서 항목의 수를 최대화하는 데 탁월하다고 말할 수 없다면. 또는 시리즈 이름의 길이를 최대화 할 수 있습니다.

+2

정확하지 않을 수도 있습니다. 그러나 'ActiveChart.Legend.IncludeInLayout = True'와 같이 그림 영역과 범례를 분리하고 다음과 같이 위치를 설정할 수 있습니다 :'ActiveChart.Legend.Position = xlLegendPositionRight' –

답변

2

전설 영역의 크기를 조정할 때이 문제가 발생했습니다. 나는 포틀랜드 러너가 제안한 것을 시도했다. 단지 .Legend.IncludeInLayout을 false로 설정했다. (그래서 그가 제안한 바와 같이 플롯 영역에서 범례를 분리했다. 오타를 만들었 을까?) 그리고 플롯 영역의 크기가 더 이상 조정되지 않았다.

+0

더 짧은 항목 이름이 만들어지는 열을 추가 할 때이 템플리트를 다시 사용했습니다. 차트/시리즈에 해당 판매원 이름을 사용할 수 있습니다. 이것에 대해 한 걸음 더 생각해 보면 계열 이름에 수식을 사용할 수 있다고 생각했습니다. 즉, 계열 이름을 항목 이름의 처음 30 자로 제한하는 left (cell, 30)입니다. 그런 다음 시리즈 이름은 30 이상이되지 않으며 범례가 더 이상 리사이즈되지 않습니다. 이것이 VBA에서 가능한지 나는 모른다. – DutchArjo

+0

간단히 내 vba 코드를 변경했습니다. sku를 표시하기 위해 내 피벗에 사용되는 새로운 변수를 추가했지만 더 짧은 이름으로 변경되었습니다. 이 변수에 대한 모든 항목의 이름은 이제 60자를 넘지 않습니다. 이것은 내가 원하는 결과를 얻기 위해 내가하는 가장 쉬운 일이었습니다. 이 코드는 = left (RC, 60)을 사용하여 더 짧은 이름을 만든 다음 모든 수식을 * range(). value = range(). value * – DutchArjo

+0

이상한 값으로 저장합니다. 각 차트에 대해 코드를 작성하고 범례의 항목 수가 변경되면 범례가 차트와 겹치지 않도록 행동합니다. – whytheq