2017-02-27 72 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

對不起,遲到的迴應。你說的沒錯,謝謝! –