VBA 将整数与图表循环迭代相结合
VBA Combine integer with chart loop iteration
我希望根据一组动态 xy 变量更改一系列条形图的格式。我设法设置了一个正确格式化单个图表的循环——选择包含数据的正确列,然后修改选择,以便省略任何空行。
我现在要做的是创建一个循环,将正确的格式应用于 sheet 中嵌入的 13 个图表中的每一个。每个图表都将读取其自己的一组三列(X 变量和 2 x 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
谢谢蚂蚁
正文编辑提供答案和正确代码
我希望根据一组动态 xy 变量更改一系列条形图的格式。我设法设置了一个正确格式化单个图表的循环——选择包含数据的正确列,然后修改选择,以便省略任何空行。
我现在要做的是创建一个循环,将正确的格式应用于 sheet 中嵌入的 13 个图表中的每一个。每个图表都将读取其自己的一组三列(X 变量和 2 x 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
谢谢蚂蚁
正文编辑提供答案和正确代码