传递VBA范围内的非连续列以创建动态图表

时间:2017-08-01 12:59:26

标签: excel vba excel-vba

我是VBA的新手并且正在尝试为简单的趋势线图表创建动态范围,最初是为了访问组件,我在创建图表时记录了一个宏,以便我可以稍后编辑源范围以动态更改< / p>

Sub Macro10()
'
' Macro10 Macro
'
    Range("B8").Select
    Range(Selection, Selection.End(xlDown)).Select
    Range(Selection, Selection.End(xlToRight)).Select
    ActiveSheet.Shapes.AddChart2(227, xlLineStacked).Select
    ActiveChart.SetSourceData Source:=Range("Sheet10!$B$8:$C$16808")

    'ActiveChart.SetSourceData Source:=Range("Sheet6!$B$8:$C$16808")
End Sub

我的源数据是单独的表格(Sheet6),我想动态引用它来构建我的图表,在源数据中,所需的列不是彼此相邻的, 所以我试图改变Range(在注释的Source Range中)来引用那些列,关于如何实现它的任何想法?

此外,我需要它对于我想在范围内传递的两列都是动态的,以构建时间序列类型的图表。

我尝试使用下面提到的答案之一,但我的图表不正确,CuurentRegion属性是选择所有列还是仅选择相关列

 data.


Sub Macro10()
'
' Macro10 Macro
'

'



    Dim R As Range

    Set R = Sheet6.Range("C1").CurrentRegion 'Dates for Time Series
    Set R = Union(R, Sheet6.Range("F1").CurrentRegion) ' Profits for those Dates

    'Range("B8").Select
    'Range(Selection, Selection.End(xlDown)).Select
    'Range(Selection, Selection.End(xlToRight)).Select
    'ActiveSheet.Shapes.AddChart2(227, xlLineStacked).Select
    'ActiveChart.SetSourceData Source:=Range("Sheet10!$B$8:$C$16808")
    ActiveSheet.ChartObjects("Chart 4").Activate
     ActiveChart.SetSourceData Source:=R

    'ActiveChart.SetSourceData Source:=Range("Sheet6!$B$8:$C$16808")


End Sub

1 个答案:

答案 0 :(得分:0)

使用选择通常不是好方法。改为在范围变量中构建单元格选择。

Dim R as Range
Set R = Range("B8", Range("B8").End(xlDown).End(xlToRight))
Set R = Union(R, Range("A1:A9")
Set R = Union(R, Range("X1:X9")

现在你可以通过这样的范围:

ActiveChart.SetSourceData Source:=R