2014-01-15 3 views
0

я определил именованный, используя следующий код:VBA реферирование именованный диапазон

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

Этот код повторяется в течение нескольких рабочих листов, таким образом, что у меня есть много именованных диапазонов под названием BCLabel, хотя это относится к различным диапазонам. Например,

=OFFSET('January'!$C$46,1,0,COUNTA('January'!$C$46:$C$69)-2) 
=OFFSET('February'!$C$46,1,0,COUNTA('February'!$C$46:$C$69)-2) 
=OFFSET('March'!$C$46,1,0,COUNTA('March'!$C$46:$C$69)-2) 

Я хотел бы закодировать создание диаграммы в каждом из этих листов, в котором указан правильный именованный диапазон. Я попытался следующий код:

ActiveSheet.Shapes.AddChart.Select 
ActiveChart.ChartType = xlColumnClustered 
ActiveChart.Name = "BCChart" 
ActiveChart.SeriesCollection(1).Values = _ 
    "==BCLabel" 
ActiveChart.SeriesCollection(2).Values = _ 
    "==BCLabel" 

Однако это не работает: «== BCLabel» не ссылается на правильный именованный диапазон, и не «== ActiveSheet.BCLabel». Буду признателен за любую помощь.

В стороне я также столкнулся с ошибкой в ​​строке ActiveChart.Name = "BCChart".

Спасибо за помощь!

+0

[** 'ActiveChart.Parent.Name '**] (http://stackoverflow.com/questions/20973149/vba-run-time-error-7-when-naming-xlxy-scatterlines-chart/20973283#20973283) –

+0

Почему существует двойная' == '? –

+0

@mehow Я записал макрос, который задал значение ActiveChart.SeriesCollection (1) .Values, и это использовало double ==, и я использовал этот код и внесли поправки, соответственно, для ссылки на соответствующий именованный диапазон. –

ответ

0

Попробуйте использовать следующий код (это работает для меня):

ActiveSheet.Shapes.AddChart.Select 
ActiveChart.ChartType = xlColumnClustered 
ActiveChart.SeriesCollection(1).Values = Range("BCLabel") 
ActiveChart.SeriesCollection(2).Values = Range("BCLabel") 

Btw это лучше избегать Select и Active... заявления. Итак, я переписал код следующим образом:

Sub test() 
    Dim ws as Worksheet 
    Dim sh As Shape 

    Set ws = Worksheets("Sheet1") 
    Set sh = ws.Shapes.AddChart 

    With sh.Chart 
     .ChartType = xlColumnClustered 
     .SeriesCollection(1).Values = ws.Range("BCLabel") 
     .SeriesCollection(1).Values = ws.Range("BCLabel") 
    End With 

End Sub 

об ошибке в строке ActiveChart.Name = "BCChart", вы можете увидеть в этом article, что это свойство только для чтения для диаграммы объектов

Смежные вопросы