在XY分散上设置线而不使用标记线

时间:2017-08-01 04:33:28

标签: vba excel-vba excel

所以我尝试使用VBA在Excel中格式化XY散点图,我希望有连接标记的线,但是对于标记和标记线,我希望它们不可见。

由于某种原因,标记线和连接标记的线都使用相同的代码来更改其可见性属性。

chart.SeriesCollection(1).Format.Line.Visible = msoFalse

我可以使用MarkerBackGroundColor属性单独更改颜色,但我似乎无法弄清楚如何在不使另一个可见的情况下使其可见。

对此的任何帮助都将非常感激。

2 个答案:

答案 0 :(得分:1)

您可以使用

FullSeriesCollection(1).Border.LineStyle = xlNone

FullSeriesCollection(1).Border.LineStyle = xlSolid

仅格式化该行。

答案 1 :(得分:0)

代码似乎有点固定。 Bellow码是设定点的样本。

Sub ScatterChart_setPoint()

Dim Ws As Worksheet
Dim DB As Range, myCell As Range
Dim Ch As Chart
Dim i As Integer, n As Long, r As Integer, g As Integer, b As Integer
Dim vX(), vY(), vLable(), vMarker
Dim pnt As Point
Dim Shp As Shape
Dim h As Single, w As Single, l As Single, t As Single, fs As Single


    Application.DisplayAlerts = False
    Set Ws = ActiveSheet 'Sheets("Current Account")
    Ws.Activate
    Ws.Range("a65536").Select
    vMarker = Array(xlMarkerStyleCircle, xlMarkerStyleDash, xlMarkerStyleDiamond, xlMarkerStyleDot, _
                   xlMarkerStylePlus, xlMarkerStyleSquare, xlMarkerStyleStar, _
                   xlMarkerStyleTriangle, xlMarkerStyleX)

    Set DB = Ws.Range("h3", Ws.Range("h3").End(xlDown))  '<~~ range of data
    For Each myCell In DB
        If myCell = 0 Or myCell.Offset(, 10) = "" Then
        Else
            n = n + 1
            ReDim Preserve vX(1 To n)
            ReDim Preserve vY(1 To n)
            ReDim Preserve vLable(1 To n)
            vX(n) = myCell
            vY(n) = myCell.Offset(, 10)
            vLable(n) = myCell.Offset(, -7)
        End If
    Next myCell

    Charts.Add

    With ActiveChart
        .HasTitle = True
        .ChartType = xlXYScatter
        .Legend.Position = xlLegendPositionRight
        With .ChartTitle
            .Characters.Text = Ws.Range("a1").Value
            .Characters.Font.Size = 12
        End With
        .SeriesCollection.NewSeries
        With .SeriesCollection(1)
            .Name = "OECD"
            .XValues = vX
            .Values = vY
            .Trendlines.Add
            With .Trendlines(1)
                .DisplayRSquared = True
                .DisplayEquation = True
            End With
        End With
        .Axes(xlValue, xlPrimary).HasTitle = True
        .Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = Ws.Range("r2")
        .Axes(xlCategory, xlPrimary).HasTitle = True
        .Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = Ws.Range("h2")

        For i = 1 To n
            Set pnt = .SeriesCollection(1).Points(i)
            With pnt
                .ApplyDataLabels
                .DataLabel.Text = vLable(i)
                .DataLabel.ShowValue = False
                .DataLabel.ShowCategoryName = True
                .MarkerStyle = vMarker(WorksheetFunction.RandBetween(0, 8))
                With WorksheetFunction
                    r = .RandBetween(0, 240)
                    g = .RandBetween(0, 240)
                    b = .RandBetween(0, 240)
                End With
                .MarkerForegroundColor = RGB(r, g, b)
                .MarkerBackgroundColor = RGB(r, g, b)
            End With
            .ApplyDataLabels
        Next i


    Application.DisplayAlerts = True
End Sub