2017-02-27 38 views
1

我是一个新的VBA用户,并试图根据系列名称格式化图表系列。我想使用vlookup来引用系列名称并返回一个已定义的MarkerStyle,MarkerForegroundColor,MarkerSize等。我想要这样做,因为我有一个系列名称的大名单,每个名称都需要一个独特的标记,我需要大量的图表。我已经开始了一个代码,但不断收到1004错误:无法获取WorksheetFunction类的VLOOKUP财产“:Excel VBA格式化图表系列与Vlookup

Sub ChartFormattingVlookup() 
    Dim mySeries As Series 
    Dim cht As ChartObject 
    Dim vbc As Range 
    Set vbc = Worksheets("VBAChartFormat").Range("A2:I44") 

    For Each cht In ActiveSheet.ChartObjects 
     cht.Activate 
     For Each mySeries In ActiveChart.SeriesCollection 
      With mySeries 
       .MarkerSize = Application.WorksheetFunction.VLookup(mySeries, vbc, 7, False) 
       .MarkerStyle = Application.WorksheetFunction.VLookup(mySeries, vbc, 6, False) 
      End With 
     Next mySeries 
    Next cht 
End Sub 

我会很感激的任何帮助或建议。谢谢!

+3

vlookup的第一个参数中的'mySeries'放置不正确。该参数需要范围引用或文字字符串,并且您正在传递一个seriescollection对象。如果你通过了'mySeries.Name',它就会工作,只要查找表有系列名称 –

回答

0

上@Scott霍尔茨曼跟进评论,为什么你在你的VLookup功能得到错误,也没有必要Activatecht然后用ActiveChart,只需使用For Each mySeries In cht.SeriesCollection

此外,您应该考虑添加错误处理可能的故障Application.WorksheetFunction.VLookup

Option Explicit 

Sub ChartFormattingVlookup() 

    Dim mySeries As Series 
    Dim cht As ChartObject 
    Dim vbc As Range 

    Set vbc = Worksheets("VBAChartFormat").Range("A2:I44") 

    For Each cht In ActiveSheet.ChartObjects 
     For Each mySeries In cht.SeriesCollection 
      With mySeries 
       If Not IsError(Application.VLookup(mySeries.Name, vbc, 7, False)) Then '<-- check VLookup was successfull 
        .MarkerSize = Application.VLookup(mySeries.Name, vbc, 7, False) 
       End If 
       If Not IsError(Application.VLookup(mySeries.Name, vbc, 6, False)) Then '<-- check VLookup was successfull 
        .MarkerSize = Application.VLookup(mySeries.Name, vbc, 6, False) 
       End If 
      End With 
     Next mySeries 
    Next cht 

End Sub 
+0

这太好了,非常感谢你的评论。斯科特,如果我的系列名不是一个字符串,而是一个整数? –

+0

@FrankS它应该仍然有效,不是吗? –

+0

对不起,迟到的回应。你说的没错,谢谢! –