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