2012-06-05 9 views
0

Я следующий кодExcel 2007 VBA не изменит название диаграммы

Sub Foo() 
    Dim Graph As Chart 
    Set Graph = AddGraph() 
    Graph.name = "XXXX" 
End Sub 

Function AddGraph() As Chart 
    Dim Graph As Chart 
    ' 
    ' 
    ' 
    Graph.name = "XXXX" 
    Set AddGraph = Graph 
End Function 

(Обратите внимание, что VBE, что нижний регистр "имя".)

В AddGraph, график создается с Name="ChartXX". Оператор присваивания НЕ меняет имя.

В Foo, когда выполняется оператор присваивания имени, управление удаляется до верхней части вызывающего стека. (Другие манипуляции графика не вызывает никаких проблем.)

Поэтому у меня есть два вопроса:

) Почему не имя смены работы в AddGraph? и

) Почему смена имени позже в Foo?

+0

'(. Обратите внимание, что VBE, что нижний регистр«имя»)' Определили вы переменную ' имя' где-то? Некоторые вещи, такие как 'Dim name as String' –

+0

No. Если вы записываете макрос, который изменяет имя диаграммы,« имя »- это строчный регистр. – user1438070

+1

Нет, это не так :) Это будет сделано только тогда, если вы указали где-то имя «Dim name as ..». Попробуй это. Закрыть Все файлы Excel. Затем откройте новый файл excel. Заполните 2 строки фиктивными данными. Создайте диаграмму и теперь запишите макрос. Проверьте сейчас :) –

ответ

0

Похоже, проблема связана с тем, что график не правильно настроен для создаваемого объекта диаграммы.

Попробуйте это:

Option Explicit 

Sub Foo() 
    Dim Graph As Chart 
    Set Graph = AddGraph() 
    Graph.Name = "MMMMMMM" 
End Sub 

Function AddGraph() As Chart 
    Charts.Add 
    With ActiveChart 
     .ChartType = xlXYScatterLines 
     .SetSourceData Source:=Sheets("Sheet1").Range("A1:B5") 
     .Name = "XXXX" 
    End With 
    Set AddGraph = ActiveChart 
End Function 

Шаг через него, и вы увидите ваш график получить название «XXXX» в функции и переименована в «MMMMMM», когда он возвращается к югу.

2

Вы пренебрегли, чтобы рассказать нам, как AddGraph() добавляет диаграмму или какой график. Руководитель Catering предполагает, что вы добавили лист диаграммы, и в этом случае Graph.Name является действительным свойством. Однако, если вы добавили график как встроенную диаграмму, Graph.Name не имеет смысла. Вместо этого вы должны задать имя родительского графа, то ChartObject:

Graph.Parent.Name = «XXXX»

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