2013-08-22 2 views
1

분산 형 차트에 플롯 할 소수의 셀을 선택할 수있는 매크로를 코딩하려고합니다.분산 형 차트 플로팅을위한 동적 다중/단일 액티브 시트 참조

현재 차트 용 셀 항목을 선택하는 위치에서 시트 이름 만 하드 코딩 할 수 있습니다.

동적 시트 참조를 허용하도록 하드 코딩을 변경할 수 있기를 바랍니다.

이렇게하면 여러 시트의 멀티 셀 셀을 선택한 다음 값을 분산 형 차트에 플로팅 할 수 있어야합니다.

귀하의 조언을 위해 아래 코드를 첨부합니다. TQ 하드 코딩 된 시트 이름에 대해 발행 : .Name = "= 'US Sector (2)'!" & MultiSel.Address (ReferenceStyle : = xlA1) 에 희망 .Name = "= [동적 시트 참조]!" & MultiSel.Address (ReferenceStyle = XLA1)

Sub ChartUSA() 
' Keyboard Shortcut: Ctrl+y 
' 
    Dim MultiSel As Range 
    Dim addr, cellAdd_name, cellAdd_Xaxis, cellAdd_Yaxis As Variant 
    Dim cnt As Integer 
    Dim ws As Worksheet 
    cnt = 0 

    ' make sure a range is selected 
    If TypeName(Selection) <> "Range" Then Exit Sub 
    Set ws = ActiveSheet 

    'For Each cnt In Selection 
    For Each MultiSel In Selection 
    cnt = cnt + 1 

    'ActiveSheet.ChartObjects("Chart USA").Activate 
    Sheets("ChartUSASX").ChartObjects("Chart USA").Activate 
    ActiveChart.PlotArea.Select 

    With ActiveChart.SeriesCollection.NewSeries 
     .Name = "=ws!" & MultiSel.Address(ReferenceStyle:=xlA1) 
     .XValues = "='US Sector (2)'!" & MultiSel.Offset(0, 24).Address(False, False) 
     .Values = "='US Sector (2)'!" & MultiSel.Offset(0, 25).Address(False, False) 

     .MarkerSize = 10 
     .ApplyDataLabels 
     .DataLabels.Select 
     Selection.ShowSeriesName = True 
     Selection.ShowValue = False 
     .MarkerSize = 10 

    End With 


    Next 

End Sub 
+0

는'MultiSel.Parent.Name' 당신에게 시트 이름을 줄 것이다. –

답변

0
Sub ChartUSA() 

    Dim MultiSel As Range 
    Dim cht As Chart 

    If TypeName(Selection) <> "Range" Then Exit Sub 

    Set cht = Sheets("ChartUSASX").ChartObjects("Chart USA").Chart 

    For Each MultiSel In Selection.Cells 
     With cht.SeriesCollection.NewSeries 
      .Name = "=" & RangeAddress(MultiSel) 
      .XValues = "=" & RangeAddress(MultiSel.Offset(0, 1)) 
      .Values = "=" & RangeAddress(MultiSel.Offset(0, 2)) 
      .MarkerSize = 10 
      .ApplyDataLabels 
      With .DataLabels 
       .ShowSeriesName = True 
       .ShowValue = False 
      End With 
      .MarkerSize = 10 
     End With 
    Next 
End Sub 

Function RangeAddress(rng As Range) As String 
    RangeAddress = "'" & rng.Parent.Name & "'!" & rng.Address(False, False) 
End Function 
관련 문제