我在Excel中有一个图表,我试图让循环更改图表中一个条形的颜色,然后引用一个单元格作为导出的图像文件的名称。循环运行多次,最后我获得了50个图表,其中包含50个不同名称的突出显示栏。我的最终目标是更改黄色的50个条形之一的颜色,使用位于单元格D3中的名称导出该图表,然后将所有条形图更改回相同的颜色,移至下一个条形图块,更改它为黄色并导出图表,其名称位于单元格D4中。
50个最终图表名称位于D3:D53的范围内。以下是我的代码。非常感谢你的帮助。
Dim i As Integer,n As Integer
Dim part1 As String
For i = 1 To 50
For n = 3 To 52
part1 = Cells(n, 4)
ActiveChart.SeriesCollection(1).Select
ActiveChart.SeriesCollection(1).Points(i).Select
With Selection.Format.Fill
.Visible = msoTrue
.ForeColor.RGB = RGB(255, 255, 0)
.Transparency = 0
.Solid
End With
ActiveSheet.ChartObjects("Chart 1").Activate
ActiveChart.Export "ImageSaveLocation" & part1 & ".png"
ActiveChart.SeriesCollection(1).Select
With Selection.Format.Fill
.Visible = msoTrue
.ForeColor.RGB = RGB(0, 112, 192)
.Transparency = 0
.Solid
End With
Next n
Next i
End Sub
答案 0 :(得分:1)
不确定为什么要嵌套For循环。
根据我的理解,您只是在ActiveChart中更改其中一个系列的颜色,使用D列中的名称导出,还原颜色,然后在图表中输出下一个系列。
下面的代码应该很好用(假设在ActiveSheet中的第一个图表上执行操作):
Sub ChartExport()
' Chart Names in D3:D53
Const lTop = 3
Dim i As Long, lColor As Long, part1 As String
Application.ScreenUpdating = False
With ActiveSheet.ChartObjects(1).Chart
For i = 1 To .SeriesCollection.Count
part1 = ActiveSheet.Cells(lTop + i - 1).Value
Application.StatusBar = "Exporting Chart " & part1 & " (" & i & ")..."
' Store Original Color, Change, Export then Restore color
lColor = .SeriesCollection(i).Format.Fill.ForeColor.RGB
.SeriesCollection(i).Format.Fill.ForeColor.RGB = RGB(255, 255, 0)
.Export "ImageSaveLocation" & part1 & ".png"
.SeriesCollection(i).Format.Fill.ForeColor.RGB = lColor
Next
End With
Application.StatusBar = False
Application.ScreenUpdating = True
End Sub
答案 1 :(得分:0)
我猜你的代码不是无限循环,只是超级慢。
在开头添加一些application.screenupdating = false(最后是= true),
避免使用.select / activate
dim i as long, n as long 'and not integer wich is slower ,
使用set
dim chartColl as Series 'or seriescollection ? (not sure, try)
set ChartColl= ActiveChart.SeriesCollection(1)
与
一起使用with ChartColl.points(i).format.fill 'untested
.visible= msoTrue
'...
end with
小提醒:你将创建大约2500 * .png文件,因此你的硬盘速度将是重要的