Почему мой код VBA создает линейный график вместо точечного графика? - PullRequest
0 голосов
/ 05 июня 2019

Я пытаюсь сгенерировать точечный график из 2 столбцов данных, но вместо этого я получаю линейный график, где данные первого столбца игнорируются (т. Е. Если у меня 1000 точек, на оси x я вижу значения от 1 до 1000, независимо от данных, хранящихся в 1-м столбце). Я не могу найти ошибку в моем коде. Что не так?

Public Sub Graph_Refresh()

    Dim cht As Chart
    Dim i As Integer
    Dim seriesIndex As Integer
    Set cht = Sheets("Graph").ChartObjects("Chart 1").Chart
    seriesIndex = 0

    ' ***** CLEAR OLD CONTENT *****
    cht.ChartArea.ClearContents

    ' ***** NON CHANGEABLE PARAMETERS *****
    'Format Font Type and Size
    cht.ChartType = xlXYScatterLinesNoMarkers                                   ' scatter plot
    cht.ChartArea.Format.TextFrame2.TextRange.Font.Name = "Arial"
    cht.ChartArea.Format.TextFrame2.TextRange.Font.Size = 12
    cht.HasTitle = False      ' No chart title
    'cht.SetElement (msoElementPrimaryValueGridLinesMajor)   'Gridlines

    'Adjust x-axis
    cht.HasAxis(xlCategory, xlPrimary) = True
    cht.Axes(xlCategory, xlPrimary).HasTitle = True
    cht.Axes(xlCategory).AxisTitle.Text = "Frequency [MHz]"
    cht.Axes(xlCategory).MinimumScale = Sheets("Graph").Range("AI7").Value
    cht.Axes(xlCategory).MaximumScale = Sheets("Graph").Range("AI8").Value

    'Adjust y-axis
    cht.HasAxis(xlValue, xlPrimary) = True
    cht.Axes(xlValue, xlPrimary).HasTitle = True
    cht.Axes(xlValue).AxisTitle.Text = "S-Parameters [dB]"
    cht.Axes(xlValue).MinimumScale = Sheets("Graph").Range("AI9").Value
    cht.Axes(xlValue).MaximumScale = Sheets("Graph").Range("AI10").Value
    cht.Axes(xlValue).CrossesAt = -100

    ' Data Series
    For i = 1 To 5
                    seriesIndex = seriesIndex + 1
                    cht.SeriesCollection.NewSeries
                    With Sheets("Graph")
                        cht.SeriesCollection(seriesIndex).Name = .Cells(6 + (i - 1) * 4).Value & " S11"
                    End With
                    cht.SeriesCollection(seriesIndex).XValues = "='" & Sheets("Data" & CStr(i)).Name & "'!$K$4:$K$10004"
                    cht.SeriesCollection(seriesIndex).Values = "='" & Sheets("Data" & CStr(i)).Name & "'!$L$4:$L$10004"
                    ' Set line size and color
                    With cht.SeriesCollection(seriesIndex)
                        .Format.Line.Weight = 2.25
                        .Format.Line.Visible = msoFalse
                        .Format.Line.Visible = msoTrue
                        .Format.Line.ForeColor.RGB = RGB(255,0,0)
                        .MarkerStyle = xlMarkerStyleNone
                    End With

    Next i


    ' Legend


End Sub

Данные хранятся в листах «Данные1» - «Данные5», и диапазон должен быть в порядке. Диаграмма "Диаграмма 1" уже существует (поэтому я ее не создаю).

Заранее спасибо за помощь!

1 Ответ

0 голосов
/ 06 июня 2019

После еще одного расследования я финансирую ответ. Я оставляю это здесь для всех, кому это может быть интересно.

Проблема была в том, что диапазон данных, который я предоставил, содержал пустые ячейки (или, точнее, ячейки с функциями, возвращающими пробелы). Изменение размера XValues ​​и Values ​​для включения только ячеек с данными решило проблему.

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