2015-02-03 3 views
0

У меня есть макрос, который создает диаграмму на каждой вкладке в данной книге (после выполнения некоторых других действий). Как часть этого, предполагается, что в диаграмме будет добавлен заголовок, причем заголовок будет присвоен имени листа. Ниже, как я пытался сделать это:Заголовок диаграммы необъяснимо исчезает

S.Shapes.AddChart2(227, xlLine).Select 
ActiveChart.SeriesCollection.NewSeries 
ActiveChart.FullSeriesCollection(1).Name = "=" & S.Name & "!$H$1" 
ActiveChart.FullSeriesCollection(1).Values = "=" & S.Name & "!$H$2:$H$" & i 
ActiveChart.FullSeriesCollection(1).XValues = "=" & S.Name & "!$G$2:$G$" & i 
temp = 0 
Do While ActiveChart.HasTitle = False 
    If temp <= 5 Then 
     ActiveChart.HasTitle = True 
     temp = temp + 1 
    Else 
     MsgBox "The script failed to add a title to the chart on " & S.Name 
    End If 
Loop 
If ActiveChart.HasTitle Then 
    ActiveChart.ChartTitle.Text = S.Name 
End If 

для контекста, я последняя строка данных для этого листа (динамически устанавливается на основе количества точек данных на этом листе), а S представляет собой переменный Рабочий лист удерживая текущий лист, temp - это всего лишь счетчик цели, который я добавил для предотвращения бесконечного цикла.

Вещь, которая меня действительно задевает, заключается в том, что ошибка возникает во второй-последней строке в вышеприведенном фрагменте. Чтобы макрос даже добрался туда, должен был быть заголовок диаграммы. Но тогда заброшенная ошибка говорит, что ее нет.

Ошибка не возникает, если я каждый раз перехожу через вышеприведенный код, но снова включается экран, и активирование S не предотвращает ошибку.

Итак, кажется, что есть какой-то контекст, который неправильно обрабатывается кодом, но я не могу понять, что мне не хватает.

Спасибо за любую помощь

+1

Какое конкретное сообщение об ошибке? –

+0

Ошибка времени выполнения '-2147024809 (80070057)': Этот объект не имеет названия. – JMichael

ответ

1

кода, который я в конце концов пошел с следующим образом. Все кредиты Джимми Смиту и Дэвиду Земенсу, хотя они меня достали, просто хотели захватить конечное состояние для всех, кто находит эту страницу в будущем

Dim ch as ChartObject 

Set ch = S.ChartObjects.Add(Left:=Range("J2").Left, Top:=Range("J2").Top, Width:=500, Height:=325) 
ch.Chart.SeriesCollection.NewSeries 
ch.Chart.FullSeriesCollection(1).Name = "=" & S.Name & "!$H$1" 
ch.Chart.FullSeriesCollection(1).Values = "=" & S.Name & "!$H$2:$H$" & i 
ch.Chart.FullSeriesCollection(1).XValues = "=" & S.Name & "!$G$2:$G$" & i 
ch.Chart.ChartType = xlLine 
temp = 0 
Do While ch.Chart.HasTitle = False 
    If temp <= 5 Then 
     ch.Chart.HasTitle = True 
     temp = temp + 1 
    Else 
     MsgBox "The script failed to add a title to the chart on " & S.Name 
    End If 
Loop 
If ch.Chart.HasTitle Then 
    ch.Chart.ChartTitle.Text = S.Name 
End If 
2

я нужна специфическая ошибка, но у меня были странные причуды с выбранными/Активные объекты. Если это ссылка на диаграмму, вы можете заменить эти ссылки ActiveChart на «S». В зависимости от версии Excel может быть S.Chart.SeriesCollection ...

что-то, чтобы проверить, см «этой линии

Dim cht as Chart 

Set cht = S.Shapes.AddChart2(227, xlLine).Chart 
cht.SetElement (msoElementChartTitleAboveChart) 'this line 
cht.SeriesCollection.NewSeries 
cht.FullSeriesCollection(1).Name = "=" & S.Name & "!$H$1" 
cht.FullSeriesCollection(1).Values = "=" & S.Name & "!$H$2:$H$" & i 
cht.FullSeriesCollection(1).XValues = "=" & S.Name & "!$G$2:$G$" & i 
temp = 0 
Do While cht.HasTitle = False 
    If temp <= 5 Then 
     cht.HasTitle = True 
     temp = temp + 1 
    Else 
     MsgBox "The script failed to add a title to the chart on " & S.Name 
    End If 
Loop 
If cht.HasTitle Then 
    cht.ChartTitle.Text = S.Name 
End If 

taken from here

+1

'S' - ссылка на объект листа. Мои мысли по одной и той же строке, однако, я пересмотрел ваш ответ с этой идеей: OP должен объявить переменную для представления объекта диаграммы и ссылаться на нее, а не на «ActiveChart». –

+0

Предложение, которое у вас было выше, к сожалению, не помешало ошибке. – JMichael

+0

@JMichael, пожалуйста, попробуйте пересмотренный ответ. –

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