2017-07-29 59 views
1

我嘗試寫遍歷表名稱的預先定義的數組,確實不便到每一個圖表代碼的陣列 我最初的猜測是遍歷一個圖表

Sub Select_Charts_On_Sheet() 
'Selects every chart on a sheet 

Dim c As Chart 
Dim ChartArray As Variant 
ChartArray = Array("Chart 1", "Chart 2", "Chart 3", "Chart 4") 
For Each c In Charts(ChartArray) 
    MsgBox (c.Name) 
Next c 

End Sub 

然而,這是行不通的。有什麼建議麼?

+2

圖表是圖表工作表。您可以使用ChartObjects代替https://stackoverflow.com/questions/36955925/loop-through-all-charts-in-a-workbook-with-vba – Slai

+0

[使用VBA循環訪問工作簿中的所有圖表]的可能重複( https://stackoverflow.com/questions/36955925/loop-through-all-charts-in-a-workbook-with-vba) –

回答

1

您需要遍歷工作表的ChartObjects,並檢查每個ChartObject.Name是否在ChartArray內部找到。

代碼

Option Explicit 

Sub Select_Charts_On_Sheet() 
'Selects every chart on a sheet 

Dim ChtObj As ChartObject 
Dim ChartArray As Variant 

ChartArray = Array("Chart 1", "Chart 2", "Chart 3", "Chart 4") 

' loop through worksheet's chart objects 
For Each ChtObj In Worksheets("Sheet1").ChartObjects ' modify "Sheet1" with your sheet's name 
    MsgBox ChtObj.Name 

    ' use application match to see if current chart object name is inside the ChartArray (of names) 
    If Not IsError(Application.Match(ChtObj.Name, ChartArray, 0)) Then ' Match was successful 
     ChtObj.Select 
    End If 
Next ChtObj 

End Sub 
0

做好每一個圖表工作表上的,很容易:

Dim ChOb As ChartObject 
For Each ChOb In ActiveSheet.ChartObjects 
    With ChOb.Chart 
     ' do something to each chart 
    End With 
Next 

或者:

Dim iCht As Long 
For iCht = 1 To ActiveSheet.ChartObjects.Count 
    With ActiveSheet.ChartObjects(i).Chart 
     ' do something to each chart 
    End With 
Next