为什么我的VBA代码创建折线图而不是散点图?

时间:2019-06-05 19:37:47

标签: excel vba

我正在尝试从2个数据列生成散点图,但是我得到了一条线图,其中第一列的数据被忽略(即:如果我有1000点,则在x轴上看到的值是1到1000,无论存储在第一列中的数据如何。我在代码中找不到错误。怎么了?

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

数据存储在工作表“ Data1”-“ Data5”中,范围应确定。图表“图表1”已经存在(这就是为什么我不创建图表)。

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

经过更多调查,我资助了答案。我把它留给任何有兴趣的人。

问题是由于我提供的数据范围包括空单元格(或更准确地说,是函数返回空白的单元格)这一事实。 调整XValues和Values的大小以仅包含具有数据的单元格可以解决此问题。