【问题标题】:Programming a Line Chart in Excel在 Excel 中编写折线图
【发布时间】:2017-04-04 08:50:47
【问题描述】:

我被赋予了以编程方式生成此图表的任务:

.

到目前为止,我已经找到了这些resourcesMSDN Docs 使用 VBA 生成图表。

这是我当前的代码:

Private Sub CommandButton1_Click()
Sheet1.Select
ActiveSheet.Shapes.AddChart.Select
ActiveSheet.Shapes(1).Top = 10
ActiveSheet.Shapes(1).Left = 10
ActiveChart.ChartType = xlLineMarkers

ActiveChart.PlotArea.Select
ActiveChart.SetSourceData Source:=Range("Table1")
ActiveChart.HasTitle = True
ActiveChart.ChartTitle.Text = Sheet1.Range("B2").Value
End Sub

但是,我并没有完全得到我需要的输出。

这是一个示例数据表:

注意事项:

  1. 橙色线 - 每个项目的上限和下限。
  2. 蓝色虚线 - 每个项目的值。

【问题讨论】:

  • 由于我们不知道您想要的输出是什么,最好的办法是记录自己创建图表。然后,您可以检查该记录的输出并将其转换为有用/可重复使用的内容。
  • @CLR 在我的第一行句子中。我修改了问题并提供了我需要的输出的超链接。
  • 您是否尝试过记录自己创建图表?
  • @CLR 我目前正在尝试。但我真的对通过 VBA 创建图表一无所知。他们希望通过单击按钮生成它(他们多么懒惰-_-)
  • 您为什么不向我们展示您当前代码的输出图表,以便我们更好地帮助解决问题所在?这目前太宽泛了,因为我们不知道您具体遇到了什么问题。

标签: vba excel charts


【解决方案1】:

好吧,接下来就接近了。您需要更改范围(或将其设置为动态找到它 - 这是另一个问题)并设置标题所在的单元格范围等,但我认为这应该可以帮助您:

Excel 2013 版:

ActiveSheet.Shapes.AddChart2(332, xlLineMarkers).Select
With ActiveChart

    ' Set the source
    .SetSourceData Source:=Range("Sheet1!$A$1:$D$6")

    ' Set the title
    .ChartTitle.Text = Sheet1.Range("B1").Value

    ' Format the labels to 45 degrees
    .Axes(xlCategory).TickLabels.Orientation = 45

    ' Set Line 2 to Orange dash, no marker
    With .FullSeriesCollection(2).Format.Line
        .ForeColor.ObjectThemeColor = msoThemeColorAccent2
        .DashStyle = msoLineDash
        .Parent.Parent.MarkerStyle = -4142
        'add other formatting here
    End With

    ' Set Line 3 to Orange dash, no marker
    With .FullSeriesCollection(3).Format.Line
        .ForeColor.ObjectThemeColor = msoThemeColorAccent2
        .DashStyle = msoLineDash
        .Parent.Parent.MarkerStyle = -4142
        'add other formatting here
    End With

End With

我通过录制一个宏然后添加一个With 来消除对.Activechart 的不必要使用。如果您以后需要参考它,您总是可以Set 它,但这又是另一个问题。如果您想进一步细化,还可以创建一个循环来取出 .FullSeriesCollection() 的一段代码。

Excel 2007/2010 版本:(具有循环和可见性解决方法以允许颜色更改)

ActiveSheet.Shapes.AddChart.Select
With ActiveChart
    .ApplyLayout (1)
    .SetSourceData Source:=Range("'Sheet1'!$A$1:$D$6")
    .ChartType = xlLineMarkers
    .Axes(xlCategory).TickLabels.Orientation = 45
    .ChartTitle.Text = Sheet1.Range("B1").Value

    For scoln = 2 To 3
        With .SeriesCollection(scoln)
            .Format.Line.Visible = False
            .Format.Line.Visible = True
            .Format.Line.ForeColor.RGB = 683236
            .Format.Line.DashStyle = msoLineSysDash
            .MarkerStyle = -4142
        End With
    Next

    With .SeriesCollection(1)
         .MarkerStyle = 8
         .MarkerSize = 8
     End With
End With

【讨论】:

  • 我在.FullSeriesCollection 上遇到错误 -> Method or data member not found
  • 显然是在进一步研究后(如果我理解正确的话)AddChart2 和这个.FullSeriesCollection 在 Office 2013 以后的版本中发现。我正在使用 2010。
  • 我在答案中添加了与早期 Office 版本兼容的版本。
  • 谢谢。甚至在您发布另一个答案之前,我就已经开始了。但真的谢谢你:)
猜你喜欢
  • 2016-02-29
  • 1970-01-01
  • 1970-01-01
  • 2012-08-12
  • 2014-10-09
  • 1970-01-01
  • 1970-01-01
  • 2021-07-09
  • 1970-01-01
相关资源
最近更新 更多