#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.