Запись в три встроенные диаграммы на листе с разной информацией

#excel #vba

#excel #vba

Вопрос:

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

Это мой код

 Option Explicit
Option Base 0

Function DOGRAPH(GRAPHDATA As Variant, ID As Integer) As Variant

    'MsgBox "DOGRAPH"

'Stop

Dim tNodes As Variant
Dim nNodes As Integer
Dim bmNodes(), ddNodes() As Double
ReDim bmNodes(nNodes), ddNodes(nNodes)
Dim i As Integer

For i = 1 To nNodes
    bmNodes(i) = tNodes(i) * 1
    ddNodes(i) = bmNodes(i) * i
Next

Dim SF, BM, DD As Chart

    Set SF = ActiveSheet.ChartObjects("Chart 3").Chart
    Set BM = ActiveSheet.ChartObjects("Chart 2").Chart
    Set DD = ActiveSheet.ChartObjects("Chart 4").Chart
   
    tNodes = GRAPHDATA(10)

    nNodes = UBound(GRAPHDATA(10)) - LBound(GRAPHDATA(10))
    
    With SF

        .HasTitle = True
        .ChartTitle.TEXT = "Shear Force Diagram"

        .SeriesCollection(1).Values = tNodes

    End With
    
    Stop
     
    With BM

        .HasTitle = True
        .ChartTitle.TEXT = "Bending Moment Diagram"

        **.SeriesCollection(1).Values = bmNodes**
        '.SetSourceData Source:=Range("O69:P81")
    End With
    
    With DD

        .HasTitle = True
        .ChartTitle.TEXT = "Deflection Diagram"

        .SeriesCollection(1).Values = ddNodes
        '.SetSourceData Source:=Range("O69:P81")
    End With
Stop

End Function
  

Первая диаграмма работает нормально, и я получаю свою диаграмму SF, но процедура прерывается на строке с bmNodes. Я экспериментировал с настройкой данных для просмотра диапазона, и диаграммы работают, но мне нужно назначить диаграмме массив. Я думаю, что это связано с оператором .SeriesCollection(1) .

Пожалуйста, какие-либо предложения?

Редактировать

Я удалил ненужный код, чтобы изолировать проблему. Рабочая книга — это ссылка www.hemis.co.uk/TEST.xlsm

Выберите СТОП и выберите ВЫПОЛНИТЬ. Я остановил ошибки.

Комментарии:

1. Пожалуйста, обратите внимание, что у меня ошибка в моем коде. Оператор For, в котором я вычисляю bmNodes и ddNodes, и Redim должны были выполняться после вычисления nNodes. Проблема с записью в диаграммы не изменилась.

2. Можете ли вы опубликовать образец данных и то, что вы ожидаете в качестве результата?

3. К вашему сведению Dim SF, BM, DD As Chart , только объявляется DD как диаграмма — два других варианта. Dim SF As Chart, BM As Chart, DD As Chart объявил бы все 3 как диаграмму

4. «процедура прерывается на строке с bmNodes» — как именно она «прерывается»? Есть ли какой-то код, который вы пропустили? Например, где tNodes заполняется?

5. Я объявил SF, BM и DD как диаграмму в отдельных строках; никаких изменений. В сообщении об ошибке указано в строке ‘.SeriesCollection(1).Values = bmNodes’ — недопустимый параметр. tNodes — это массив из 3000 точек, каждое значение которого содержится в отдельном модуле, который передается функции в переменной GRAPHDATA. Я вызываю функцию, используя DOGRAPH = Application.Run(«DOGRAPH», RESULT, ID); РЕЗУЛЬТАТОМ являются ГРАФИЧЕСКИЕ ДАННЫЕ в функции. Идентификатор — это целое число; в данном случае 10.