2017-07-29 96 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