Почему мой код VBA работает только при добавлении MsgBox? - PullRequest
0 голосов
/ 27 ноября 2018

РЕДАКТИРОВАТЬ: я считаю, что мое сообщение об ошибке «Максимальное количество рядов данных на диаграмме 255» было связано с выбором диапазона, который я имел до вызова метода AddChart2.Я до сих пор не знаю, почему ранее было сказано, что у моей диаграммы нет заголовка, хотя я объявил .HasTitle как истинное.Считайте, что этот вопрос решен на данный момент, хотя я все еще хотел бы знать, почему он не работал ранее.

Также в используемой мной подпрограмме предсуществующие объекты диаграммы удаляются до того, как они попадут в этот код, поэтому с индексом ChartObjects (1) проблем нет.

Успех приведенного ниже кода полностью определяет, включать ли я функцию MsgBox.Кроме того, кажется, что это работает, только когда я передаю этот конкретный аргумент в MsgBox (ввод «MsgBox 1» не работает, даже если на странице есть один объект ChartObject).Кто-нибудь знает, почему это так?

ActiveSheet.Shapes.AddChart2(227, xlLine).Select
ActiveChart.SetSourceData Source:=Range("$M2:$M" & CStr(Cells(Rows.Count, 13).End(xlUp).Row))

'MsgBox ActiveSheet.ChartObjects.Count

With Sheets("blah").ChartObjects(1).Chart
    .HasTitle = True
End With

MsgBox Sheets("blah").ChartObjects(1).Chart.HasTitle   ' (always returns True)

Sheets("blah").ChartObjects(1).Chart.ChartTitle.Text = "bleh"

Когда код работает, я получаю диаграмму с заголовком, как задумано.Когда это не работает, я получаю сообщение об ошибке, что у диаграммы нет заголовка.

1 Ответ

0 голосов
/ 27 ноября 2018

Предполагая, что ActiveSheet равен Sheet("blah"), попробуйте это ...

Dim theChart As ChartObject ' Reference the new or existing chart
Dim sourceRange As Range    ' Chart's data source

' Create or attach to the chart and get the chart's source data range
With Sheets("blah")

    ' Create the chart if it doesn't exist
    If .ChartObjects.Count = 0 Then
        .Shapes.AddChart2 227, xlLine
    End If

    ' Grab a pointer to the chart
    Set theChart = .ChartObjects(1)

    ' Grab a pointer to the source range while inside the sheet's WITH block
    Set sourceRange = .Range("$M2:$M" & CStr(.Cells(.Rows.Count, 13).End(xlUp).Row))

End With

' Set the chart up.
With theChart.Chart
    .SetSourceData source:=sourceRange
    .HasTitle = True
    .ChartTitle.Text = "bleh"
End With

' Clean up
Set theChart = Nothing
Set sourceRange = Nothing

РЕДАКТИРОВАТЬ: При проверке исходного кода произошла ошибка.Это было проверено в Excel 2016 и работает.Также добавлены комментарии к коду для уточнения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...