2013-08-22 38 views
1

我想編碼一個宏,它允許我選擇要繪製在散點圖上的幾個單元格。散點圖繪製的動態多個/單個activesheet參考環

但目前我只能硬編碼表單名稱從我選擇圖表的單元格條目。

我希望能夠更改硬編碼以允許動態工作表參考。

這應該允許從不同的工作表中選擇多個單元格,然後將他們的值繪製到散點圖中。

我附上下面的代碼您的意見。 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