Я хочу изменить форматирование ряда гистограмм на основе набора динамических переменных 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
Спасибо, Муравей