VBA Объединить целое число с итерацией цикла диаграммы - PullRequest
0 голосов
/ 01 мая 2018

Я хочу изменить форматирование ряда гистограмм на основе набора динамических переменных xy. Мне удалось настроить цикл, который правильно форматирует одну диаграмму - выбрав правильные столбцы, содержащие данные, а затем изменив выбор, чтобы все пустые строки были пропущены.

Сейчас я пытаюсь создать цикл, который применяет правильное форматирование к каждой из 13 диаграмм, встроенных в лист. Каждая диаграмма будет считывать свой собственный набор из трех столбцов (переменных X и 2 переменных Y), которые будут содержать диапазоны данных, которые варьируются от диаграммы к диаграмме. Я стремился сделать это, используя range.offset и целочисленную переменную (j2 в приведенном ниже коде), которая увеличивается с каждой итерацией, чтобы сместить ссылки на столбцы вправо на единицу для каждой итерации цикла.

Мне понадобится эта переменная для цикла одновременно с циклом диаграммы - возможно ли получить переменную из числовых диаграмм, ранее активированных в цикле, или числа пройденных итераций?

Строка, о которой идет речь, - 'j2 = j1 + в приведенном ниже коде (удалено).

**** Теперь я решил проблему, в основном, добавив простой счетчик (j1) и переместив переменную lastrow внутри структуры цикла. Завершенный код можно увидеть ниже: ****

    Sub ModifyChart()
Dim AllCatRange As Range
Dim lastRow As Long
Dim iLoop As Long
Dim PlotSerRange As Range
Dim PlotSer2Range As Range
Dim PlotCatRange As Range
Dim ws As Worksheet
Dim objCht As ChartObject
Dim j1 As Integer

Set ws = Worksheets("Indicator Summary")
j1 = -3

 With ws
     For Each objCht In ws.ChartObjects
        lastRow = 5
        j1 = j1 + 3
        Set AllCatRange = Worksheets("Indicator Summary").Range("J6:J50").Offset(0, j1)

        For iLoop = 1 To 45
            If AllCatRange.Cells(iLoop, 1) <> "" Then
            lastRow = lastRow + 1
            End If
        Next iLoop

        Set PlotCatRange = .Range("J6:J" & lastRow).Offset(0, j1)
        Set PlotSerRange = .Range("K6:K" & lastRow).Offset(0, j1)
        Set PlotSer2Range = .Range("L6:L" & lastRow).Offset(0, j1)

        With objCht
        .Chart.SeriesCollection(1).XValues = "=" & PlotCatRange.Address(False, False, xlA1, xlExternal)
        .Chart.SeriesCollection(1).Values = "=" & PlotSerRange.Address(False, False, xlA1, xlExternal)
        .Chart.SeriesCollection(2).XValues = "=" & PlotCatRange.Address(False, False, xlA1, xlExternal)
        .Chart.SeriesCollection(2).Values = "=" & PlotSer2Range.Address(False, False, xlA1, xlExternal)

        Set AllCatRange = Nothing
        Set PlotCatRange = Nothing
        Set PlotSerRange = Nothing
        Set PlotSer2Range = Nothing

        End With

    Next objCht
    End With

End Sub

Спасибо, Муравей

1 Ответ

0 голосов
/ 04 мая 2018

Правка в основном тексте дает ответ и правильный код

...