2014-08-27 5 views
4

하나의 그래프에서 서식을 복사하고 다른 여러 그래프에 적용하는 매크로를 작성하려고합니다.userform 내의 차트 선택

사용자가 템플릿 차트를 설정 한 다음 다른 여러 차트를 선택할 수있는 방법을 결정하는 것이 어렵습니다. 사용자가 차트 이름을 알고있는 경우 콤보 상자를 사용하여이 작업을 수행 할 수 있지만 차트 이름을 알지 못하면이 작업을 수행하려고합니다.

나는 사용자가 기본 차트를 선택한 다음 차트를 선택하여 서식을 적용 할 수있는 사용자 대화 상자가 있다고 생각했습니다. 범위에 대해 refedit과 같습니다. 그러나 사용자 폼 내에서 그래프를 참조하는 방법을 알 수는 없습니다.

이렇게 할 수 있습니까? 그렇다면 어떻게 할 수 있습니까? 이 즉,

Public Sub ProcessSelectedCharts() 
    Dim i As Integer 
    Dim chart_obj As ChartObject 
    Dim chart_area As chartArea 

    If TypeOf Selection Is DrawingObjects Then 
     For i = 1 To Selection.Count 
      If TypeOf Selection(i) Is ChartObject Then 
       Set chart_obj = Selection(i) 
       Set chart_area = chart_obj.Chart.chartArea 
       Call ProcessChart(chart_area) 
      End If 
     Next i 
    ElseIf TypeOf Selection Is chartArea Then 
     Set chart_area = Selection 
     Call ProcessChart(chart_area) 
    End If 

End Sub 

Public Sub ProcessChart(obj As chartArea) 
    ' Do something... 
End Sub 

당신이 조금 수정 할 수 있습니다 :

+1

일반적으로, 나는 "넓은"을 것으로 같은 질문을 투표를하지만,이 경우에 I는 다음과 같이 예외를 만드는 중이라서이 당신이 당신의 질문을 좁힐 경우 구체적인 난 그냥 –

답변

5

다음은 여러분을 시작할 때 필요한 것입니다.

두 개의 ComboBox와 두 개의 이미지 컨트롤을 사용자 폼에 배치하십시오.

enter image description here

은의 워크 시트는 모두 콤보에 차트 이름을 채우는 UserForm_Initialize() 경우이

enter image description here

과 같은 가정 해 봅시다.양식을 실행할 때 예를 들어

Dim ws As Worksheet 

'~~> Prepare your form 
Private Sub UserForm_Initialize() 
    Set ws = ThisWorkbook.Sheets("Sheet1") 

    Dim ChartObj As ChartObject 

    For Each ChartObj In ActiveSheet.ChartObjects 
     ComboBox1.AddItem ChartObj.Name 
     ComboBox2.AddItem ChartObj.Name 
    Next ChartObj 
End Sub 

그래서, 그것은 차트를 보여 HERE에서 스티븐 Bullen의 PastePicture 코드를 사용하여 콤보의 클릭 이벤트에서이

enter image description here

모양을 사용자 폼에. 예 :

Private Sub ComboBox1_Click() 
    ws.Shapes(ComboBox1.Value).CopyPicture 
    Set Me.Image1.Picture = PastePicture(xlPicture) 
End Sub 

Private Sub ComboBox2_Click() 
    ws.Shapes(ComboBox2.Value).CopyPicture 
    Set Me.Image2.Picture = PastePicture(xlPicture) 
End Sub 

양식의 모양입니다.

거기에서 이제 차트의 이름을 알 수 있습니다. 당신이 원하는대로 작동하도록 간단히 사용하십시오.

희망이 도움이됩니다.

enter image description here

2

다음 코드는 당신이 하나 개 또는 여러 차트를 선택할 수 있습니다 선택한 차트 영역 (들)로 물건을 할 수 있도록해야 사용자가 실제 차트를 선택하면 작동하지만 차트에서 특정 요소 만 선택하면 실패 할 수 있습니다.

다음 질문은 사용자 폼에서 언제 호출 할 것인가입니다. 먼저 사용자 양식을 모달로 선택해야 사용자가 선택 항목을 사용할 수 있습니다. 그렇다면 사용자가 실제로 어떤 것을 선택했는지 어떻게 알 수 있습니까? 나는 세 가지 방법을 생각할 수, 나는 (지난 2는 내가 그들을 사용을 권장하지 것처럼 매우 간단히 설명) 최악의 최고의에서 해당 목록을 나열합니다 :

  1. 사용 "Worksheet_SelectionChange"이벤트에를 워크 시트를 열고 사용자 폼 내의 메서드를 호출하여 선택이 변경되었음을 알립니다. 이제는 차트가 선택되었는지 (위의 코드 참조) 확인하고 알고리즘을 실행하기 만하면됩니다.

  2. 사용자 폼에서 타이머를 실행하고 활성 선택을 정기적으로 확인하십시오.

  3. DLL 호출로 마우스 이벤트를 후킹하고 마우스 클릭을 등록한 다음 선택 변경 사항을 확인하십시오.

이렇게하면 사용자 정의 폼에서 워크 시트의 차트를 선택하는 것과 같은 참조 편집 기능을 만들 수 있습니다.

+0

을 :)에 좋은 질문이 될 "수" 당신이 대답을 올린 것을 보았습니다. 나는 언젠가 그것을 위해 일하고있는 것처럼 대답을 게시하려하고있다. 나는 당신이 대답을 게시하는 것을 꺼리지 않기를 바랍니다. 또한 다른 접근 방법을 따릅니다. –

+0

+1 대안 : –

+0

보기, 나는 당신과 @SiddharthRout의 답변을 함께했습니다. Siddharth의 코드 조각을 사용하여 기본 사례 그래프를 선택한 다음 코드를 사용하여 이미 선택한 차트에 서식을 적용합니다. 그러나 나는 당신의 코드가 아직 작동하지 않습니다. 도와 주실 수 있습니까? 코드 조각에서'chart_area = chart_obj.Chart.chartArea'를 설정하는 데 어려움을 겪고있었습니다. 그래서 loop 내의 코드를 사용하여'targetName = Selection (i) .Name'을 사용하여 차트 이름을 얻고 이것을 사용하려고합니다. – MatthewK