1

到目前为止,这段代码创建了 3 个图表。最后一张图表有两个系列。第二个系列从负数开始,所以我放在cht.Axes(xlValue).MinimumScale = 0下面代码的末尾,以使 y 轴无论如何都从零开始。唯一的问题是它让我的图表看起来很混乱。有什么可以添加到现有代码中以使第二个系列跳过输入负数并从第一个 0 或正数开始?

 Sub UpdateCharts()
    Dim cObj As ChartObject
    Dim cht As Chart
    Dim shtName As String
    Dim chtName As String
    Dim xValRange As Range
    Dim lastRow As Long

    With ActiveSheet
        lastRow = .Range("B" & .Rows.Count).End(xlUp).Row
        Set xValRange = .Range("B2:B" & lastRow)
        shtName = .Name & " "
    End With


    '## This sets values for Series 1 in each chart ##'
    For Each cObj In ActiveSheet.ChartObjects
        Set cht = cObj.Chart
        chtName = shtName & cht.Name

        If cht.SeriesCollection.Count = 0 Then
        '## Add a dummy series which will be replaced in the code below ##'
            With cht.SeriesCollection.NewSeries
                .Values = "{1,2,3}"
                .XValues = xValRange
            End With

        End If

        '## Assuming only one series per chart, we just reset the Values & XValues per chart ##'
        With cht.SeriesCollection(1)
        '## Assign the category/XValues ##'
            .Border.Color = RGB(0, 0, 255)
            .XValues = xValRange

        '## Here, we set the range to use for Values, based on the chart name: ##'
            Select Case Replace(chtName, shtName, vbNullString)
                 Case "RPM"
                      .Values = xValRange.Offset(0, 3) '## Column E is 3 offset from the xValRange in column B
                      .Name = "RPM"
                 Case "Pressure/psi"
                      .Values = xValRange.Offset(0, 5) '## Column G is 5 offset from the xValRange in column B
                      .Name = "Pressure/psi"
                 Case "Burn Off"
                    .Values = xValRange.Offset(0, 6)   '## Column H is 6 offset from the xValRange in column B
                    .Name = "Demand burn off"
                    '## Make sure this chart has 2 series, if not, add a dummy series ##'
                    If cht.SeriesCollection.Count < 2 Then
                        With cht.SeriesCollection.NewSeries
                            .XValues = "{1,2,3}"

                        End With
                    End If
                    '## add the data for second series: ##'
                    cht.SeriesCollection(2).XValues = xValRange
                    cht.SeriesCollection(2).Values = xValRange.Offset(0, 8)  '## Column J is 8 offset from the xValRange in column B
                    cht.SeriesCollection(2).Name = "Step Burn Off"
                    cht.SeriesCollection(2).Border.Color = RGB(255, 0, 0)

                 Case "Add as many of these Cases as you need"

            End Select

        End With
        cht.Axes(xlValue).MinimumScale = 0

    Next
    End Sub

这是图像: 烧掉

4

1 回答 1

0

如果我很好地理解了您的问题,那么一种非常简单的方法是为带有负值的系列选择条形或标记。

在图表中选择您的系列->左键单击->格式化系列,然后在第二个选项中选择“显示标记”,然后在线条颜色选项(向下第 4 个)中将线条设置为不可见。

这是一个例子:燃烧器示例

在 Vba 中,可以使用的属性如下:

ChartObjects("Graphique 1").MarkerStyle = -4109
With Selection code
.MarkerStyle = 3
.MarkerSize = 10
End With
于 2013-05-03T15:57:18.147 回答