Excel VBA如何将静态线添加到图形上?

Excel VBA如何将静态线添加到图形上?,excel,vba,graph,Excel,Vba,Graph,我对这东西还不太熟悉,所以感觉很不好。我试图创建一个脚本,该脚本绘制从测试中收集的值,然后绘制两个静态值(QC和生产的需求规范)进行比较。我已经能够创建一个显示测试值的图表,但我似乎无法获得QC和生产规格的直线,除非我像这样键入每个数组值: .Values=数组(19,19,19,19) 我希望这条线在长度上具有一定的动态性,以确保无论有多少行/列,它都能在图形中延伸 非常感谢您在我应该选择的方向或更好的方式上给予我的任何帮助 Dim myChtObj As ChartObject

我对这东西还不太熟悉,所以感觉很不好。我试图创建一个脚本,该脚本绘制从测试中收集的值,然后绘制两个静态值(QC和生产的需求规范)进行比较。我已经能够创建一个显示测试值的图表,但我似乎无法获得QC和生产规格的直线,除非我像这样键入每个数组值:

.Values=数组(19,19,19,19)

我希望这条线在长度上具有一定的动态性,以确保无论有多少行/列,它都能在图形中延伸

非常感谢您在我应该选择的方向或更好的方式上给予我的任何帮助

    Dim myChtObj As ChartObject
    Dim rngChtData As Range
    Dim rngChtXVal As Range
    Dim iColumn As Long
    Dim iRow As Long

    ' make sure a range is selected
    If TypeName(Selection) <> "Range" Then Exit Sub

    ' define chart data
    Set rngChtData = Selection

    ' define chart's X values
    With rngChtData
        Set rngChtXVal = .Columns(1).Offset(1).Resize(.Rows.Count - 1)
    End With

    ' add the chart
    Set myChtObj = ActiveSheet.ChartObjects.Add _
        (Left:=250, Width:=375, Top:=75, Height:=225)

    With myChtObj.Chart

        ' make an XY chart
        .ChartType = xlXYScatterLines

        ' remove extra series
        Do Until .SeriesCollection.Count = 0
            .SeriesCollection(1).Delete
        Loop

        ' add series from selected range, column by column
        For iColumn = 3 To rngChtData.Columns.Count
            With .SeriesCollection.NewSeries
                .Values = rngChtXVal.Offset(, iColumn - 1)
                .XValues = rngChtXVal
                .Name = rngChtData(1, iColumn)
            End With
        Next

      Set ser = .SeriesCollection.NewSeries
      ser.Values = Array(19, 19, 19, 19)
      ser.XValues = rngChtXVal
      ser.Name = "QC Retraction"

    End With
End Sub
Dim myChtObj作为图表对象
Dim rngChtData As范围
Dim rngChtXVal As范围
昏暗的像长一样的柱
暗淡无光
'确保选择了一个范围
如果TypeName(选择)“Range”,则退出Sub
'定义图表数据
设置rngChtData=Selection
'定义图表的X值
使用rngChtData
设置rngChtXVal=.Columns(1).偏移量(1).调整大小(.Rows.Count-1)
以
'添加图表
设置myChtObj=ActiveSheet.ChartObjects.Add_
(左=250,宽=375,顶=75,高=225)
用myChtObj.图表
'制作XY图表
.ChartType=xlxy散点线
'删除额外系列
直到.SeriesCollection.Count=0为止
.系列集合(1).删除
环
'从选定范围逐列添加系列
对于iColumn=3的rngChtData.Columns.Count
With.seriecollection.NewSeries
.Values=rngChtXVal.Offset(,iColumn-1)
.XValues=rngChtXVal
.Name=rngChtData(1,iColumn)
以
下一个
Set ser=.SeriesCollection.NewSeries
序列值=数组(19,19,19,19)
ser.XValues=rngChtXVal
ser.Name=“QC收回”
以
端接头
电流输出

我想输出什么


您只需添加一个具有两个点的序列-一个点位于最小x轴值,另一个点位于最大值(具有相同的y值)。然后根据需要格式化该行

例如:

  Set ser = .SeriesCollection.NewSeries
  .Legend.LegendEntries(.SeriesCollection.Count).Delete 'remove from legend
  With ser
    .Values = Array(19, 19)
    .XValues = Array(myChtObj.Chart.Axes(xlCategory).MinimumScale, _
                     myChtObj.Chart.Axes(xlCategory).MaximumScale)
    .Name = ""
    .MarkerStyle = -4142  'no markers
    .Format.Line.ForeColor.RGB = vbBlack
    .Points(2).ApplyDataLabels
    .Points(2).DataLabel.Format.TextFrame2.TextRange.Characters.Text = "QC Retraction"
  End With

编辑-添加直线本身可能会更改x轴限制,因此您可能希望在添加序列之前直接设置这些限制。

您只需添加具有两个点的序列-一个点位于最小x轴值,另一个点位于最大值(具有相同的y值)。然后根据需要格式化该行

例如:

  Set ser = .SeriesCollection.NewSeries
  .Legend.LegendEntries(.SeriesCollection.Count).Delete 'remove from legend
  With ser
    .Values = Array(19, 19)
    .XValues = Array(myChtObj.Chart.Axes(xlCategory).MinimumScale, _
                     myChtObj.Chart.Axes(xlCategory).MaximumScale)
    .Name = ""
    .MarkerStyle = -4142  'no markers
    .Format.Line.ForeColor.RGB = vbBlack
    .Points(2).ApplyDataLabels
    .Points(2).DataLabel.Format.TextFrame2.TextRange.Characters.Text = "QC Retraction"
  End With
编辑-添加直线本身可能会更改x轴限制,因此您可能希望在添加系列之前直接设置这些限制