2014-02-25 123 views
0

我在Excel中一個圖表,我想有一個循環改變一個欄的顏色的圖表中,然後引用單元格用於導出圖像文件的名稱。該循環運行多次,最終我得到50個圖表與50個不同的名稱相同的突出顯示欄。我的最終目標是改變顏色爲黃色,出口的50杆,與同是位於小區D3的名稱圖表,然後更改所有的酒吧回到相同的顏色,移動到下一個吧,換一個它將黃色並用位於單元格D4中的名稱導出圖表。VBA在Excel中,循環繼續運行

50點最終圖表名稱位於D3的範圍:D53。以下是我的代碼。非常感謝您的幫助。

暗淡我作爲整數,n爲整數

昏暗的第一部分作爲字符串

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 

末次

回答

0

我想你的代碼是不是無限循環,它只是超級慢。

在開始(和結束=真),

避免添加一些application.screenupdating =假使用。選擇/激活

dim i as long, n as long 'and not integer wich is slower , 

使用設置

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文件,所以你的硬盤的速度將是重要的

0

不知道爲什麼你有嵌套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