Как объединить несколько объектов Range в один для использования в качестве источника диаграммы - PullRequest
4 голосов
/ 28 марта 2012

Я пытаюсь создать диаграмму с несколькими столбцами в качестве исходной области. По сути, я хочу выбрать определенные столбцы, где я пропускаю некоторые столбцы и объединяю их все в один диапазон. Я настроил цикл, в котором я создаю диапазон, добавляю его адрес к строке и разделяю их запятой. Я уверен, что именно так 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 ]

7 голосов
/ 28 марта 2012

Как обсуждалось в комментариях выше, лучший способ справиться с этим - использовать встроенные функции VBA, такие как Union.

. Вы можете найти несколько ссылок о том, как это использовать:

Тем не менее, обратите внимание, что вы можете ответить на свой вопрос (даже настоятельно рекомендуется ) и принять его.Таким образом, вы можете поделиться своими знаниями с сообществом и тем, как вы решили свою проблему с помощью собственного кода.
ИМХО, это было бы даже лучше, чем принять мой ответ.

2 голосов
/ 28 марта 2012

Следуя указаниям JMax, я использовал Union. Это код, которым я закончил. В первый раз в цикле я установил CombinedRange на свой фактический диапазон, а в последующих прогонах я объединяю.

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...