2014-01-09 64 views
0

我期待運行下面的任務之外:參考ActiveSheet對象VBA

1:創建動態圖表模板工作表(即圖表掛在尺寸頻繁改變數據範圍)

2:將模板複製多次到新的工作表中,每個工作表使用循環遍歷另一個工作表中的PivotItems的代碼自動重命名。

3:然後將數據透視表中的數據複製到這些複製的工作表中,每個工作表中的動態表現在反映了通過它複製的數據。

雖然我遇到了以下問題,但我編寫了大部分這些任務。動態圖表通過引用使用OFFSET和COUNTA函數定義的命名範圍來創建。使用下面的代碼在新的工作表中定義每個模板重複,我已經設置命名範圍時間:

ActiveWorkbook.ActiveSheet.Names.Add Name:="Label", RefersToR1C1:= _ 
    "=OFFSET(ActiveSheet!R46C3,1,0,COUNTA(ActiveSheet!R46C3:R69C3)-2)" 
ActiveWorkbook.ActiveSheet.Names("Label").Comment = "" 

ActiveWorkbook.ActiveSheet.Names.Add Name:="YTD2012", RefersToR1C1:= _ 
    "=OFFSET(ActiveSheet!R46C5,1,0,COUNTA(ActiveSheet!R46C3:R69C3)-2)" 
ActiveWorkbook.ActiveSheet.Names("YTD2012").Comment = "" 

ActiveWorkbook.ActiveSheet.Names.Add Name:="YTD2013", RefersToR1C1:= _ 
    "=OFFSET(ActiveSheet!R46C6,1,0,COUNTA(ActiveSheet!R46C3:R69C3)-2)" 
ActiveWorkbook.ActiveSheet.Names("YTD2013").Comment = "" 

[我使用羣集柱形圖,因此對於涉及數據的兩個命名區域的要求,一個與數據標籤有關]

ActiveSheet對象是必需的,因爲每次運行報表時工作表名稱都會有所不同。但是,在爲模板上的圖表選擇數據源時,如果這是一個VBA對象,則無法引用ActiveSheet。我寧願保留在模板上預先格式化的圖表(而不是每次通過VBA創建它們),因爲它們的格式和位置不同。有什麼辦法可以在Excel中引用ActiveSheet或類似的東西,或者是爲VBA中的每個工作表創建圖表的唯一解決方案?

回答

1

如果不包括工作表的名稱將默認爲activesheet:

ActiveWorkbook.ActiveSheet.Names.Add Name:="Label", RefersToR1C1:= _ 
    "=OFFSET(R46C3,1,0,COUNTA(R46C3:R69C3)-2)" 

如果你確實想用牀單名字,那麼這將是ActiveSheet.Name

With ActiveWorkbook.ActiveSheet 
    .Names.Add Name:="Label", RefersToR1C1:= _ 
    Replace("=OFFSET('<nm>'!R46C3,1,0,COUNTA('<nm>'!R46C3:R69C3)-2)","<nm>", .Name) 
End With 

極品如果工作表名稱可能包含空格,請添加單引號。