如何将多个Range对象合并为一个,以用作Chart源

时间:2012-03-28 08:30:51

标签: excel-vba vba excel

我正在尝试创建一个图表,其中多列作为源区域。 基本上,我想选择特定列,我跳过一些列,并将它们全部合并到一个范围。我已经设置了一个循环,在那里我创建了一个范围,并将它的地址附加到一个字符串,并用逗号分隔它们。我很确定这就是Excel希望它格式化的方式。

但是,我似乎无法从这个字符串中创建一个新范围。

我希望有人可以帮助我。

我非常想避免,不得不将列复制到新工作表,只需将其全部标记为范围。

我有以下代码,用于组合范围:

'Loops for each number of sections
For Z = 1 To Sheet1.txtNoSections

    'Get gauge to use
    Section = Workbooks(ThisWorkbook.Name).Worksheets(1).Cells(26 + Z, 6).Value
    'Sets varibel for distance from root
    Dist = Workbooks(ThisWorkbook.Name).Worksheets(1).Cells(26 + Z, 3).Value
    'Get range to use
    Set ChartRange = ActiveSheet.Range(ActiveCell, ActiveCell.Offset(rc, Section))
    RangeString = RangeString & ChartRange.AddressLocal
    If Z <> 1 Then
        RangeString = RangeString & ","
    End If

Next Z

然后我尝试用这样的东西来获得一个新的范围,但没有运气。

Dim ActualRange As Range
Set ActualRange = ActiveSheet.Range(RangeString)

打印RangeString时,它看起来像这样: $S$2$V$6181$S$2:$X$6181,$S$2:$Z$6181,$S$2:$AB$6181,$S$2:$AD$6181,$S$2:$AF$6181,$S$2:$AH$6181,$S$2:$AJ$6181,$S$2:$AL$6181,$S$2:$AN$6181,$S$2:$AP$6181,$S$2:$AR$6181,$S$2:$AT$6181,$S$2:$AV$6181,$S$2:$AX$6181,$S$2:$AZ$6181,$S$2:$BB$6181,$S$2:$BD$6181,$S$2:$BF$6181,$S$2:$BH$6181,$S$2:$BJ$6181,$S$2:$BL$6181,$S$2:$BN$6181,$S$2:$BP$6181

似乎就像工会一样。

2 个答案:

答案 0 :(得分:7)

正如上面的评论中所讨论的,处理此问题的最佳方法是使用本机VBA函数,例如Union

您可以找到有关如何使用它的几个参考:

但请注意,您可以回答自己的问题(甚至是highly recommended)并接受它。这样,您就可以与社区分享您的知识,以及您使用自己的代码解决问题的方式 恕我直言,这比接受我的回答更好。

答案 1 :(得分:2)

按照JMax的指导,我最终使用了Union。 这是我最终得到的代码。 第一次循环,我将CombinedRange设置为我的实际范围,以及随后的运行,I union。

For Z = 1 To Sheet1.txtNoSections

    'Get gauge to use
    Section = Workbooks(ThisWorkbook.Name).Worksheets(1).Cells(26 + Z, 6).Value
    'Get range to use
    Set ChartRange = ActiveSheet.Range(ActiveCell, ActiveCell.Offset(rc, 0))
    Debug.Print "ChartRange(" & Z & "): " & ChartRange.Address
    If Z = 1 Then
        Set CombinedRange = ChartRange
    Else
        Set CombinedRange = Union(CombinedRange, ChartRange)
    End If
    ActiveCell.Offset(0, 5).Activate

Next Z
Debug.Print "Combined: " & CombinedRange.Address