0

如何使图表填充特定范围?不久前我发现了如何使用 VBA 来做到这一点,但我终生无法找到如何再次做到这一点。我想要一个图表来填充一个特定的范围,比如 F1 到 K8。这样,如果左侧的其他列由于用户输入而发生变化,则图形仍保持在该范围内,从而使一切看起来都不错。

我的第二个问题是,如何使用 VBA 更改 excel 图表上标记的大小?我正在绘制数千个数据点,默认标记是巨大的菱形,所以图表看起来很荒谬。这条线就是这么粗的东西。

还有一个额外的奖励问题!我正在使用 VBA 制作整个图表。我正在制作两个系列。但是,当插入这两个系列时,它会添加第三个系列,其中没有数据点。如果它没有出现在传说中,那也不会令人讨厌。如何删除系列?

谢谢!这是相关的代码。Counter 和 NewTracker 是基于用户输入的变量。对于我正在使用的数据,我相信 Counter = 13 和 NewTracker = 1202,但根据我的问题,我认为这并不重要!如果您想使用示例,只需用更好的东西替换范围即可。:)

Sub Makingthechart()
    ActiveSheet.Shapes.AddChart.Select
    ActiveChart.ChartType = xlXYScatter
    ActiveChart.SeriesCollection.NewSeries
    ActiveChart.SeriesCollection(1).Name = "=Sheet1!$B$1"
    ActiveChart.SeriesCollection(1).XValues = "=Sheet1!$A$2:$A$" & Counter + 1
    ActiveChart.SeriesCollection(1).Values = "=Sheet1!$B$2:$B$" & Counter + 1
    ActiveChart.SeriesCollection.NewSeries
    ActiveChart.SeriesCollection(2).Name = "CFL Calculated"
    ActiveChart.SeriesCollection(2).XValues = "=Sheet1!$XFB$1:$XFB$" & NewTracker
    ActiveChart.SeriesCollection(2).Values = "=Sheet1!$XFC$1:$XFC$" & NewTracker
    With ActiveWorkbook.ActiveChart
        .HasTitle = True
        .ChartTitle.Characters.Text = "CFL Over Time"
        .Axes(xlCategory, xlPrimary).HasTitle = True
        .Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "Time (Days)"
        .Axes(xlValue, xlPrimary).HasTitle = True
        .Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "CFL"
        .Axes(xlCategory).HasMajorGridlines = True
        .Axes(xlCategory).HasMinorGridlines = True
    End With
End Sub

我非常感谢您的所有帮助!到目前为止,你们是我在实习中取得相当成功的原因!我不敢相信你们知道我什至无法通过 Google 找到的所有关于 VBA 的小知识。

4

1 回答 1

2
Sub Makingthechart()
    Dim co As Shape, cht As Chart
    Dim rngChart As Range, sc As SeriesCollection

    Set rngChart = ActiveSheet.Range("F2:J15")


    Set co = ActiveSheet.Shapes.AddChart(xlXYScatter, rngChart.Cells(1).Left, _
                                          rngChart.Cells(1).Top, _
                                          rngChart.Width, rngChart.Height)

    Set cht = co.Chart
    Set sc = cht.SeriesCollection

    'remove any default series
    Do While sc.Count > 0
        sc(1).Delete
    Loop

    With sc.NewSeries
        .Name = "=Sheet1!$B$1"
        .XValues = "=Sheet1!$A$2:$A$" & counter + 1
        .Values = "=Sheet1!$B$2:$B$" & counter + 1
        .MarkerSize = 3
    End With

    With sc.NewSeries
        .Name = "CFL Calculated"
        .XValues = "=Sheet1!$XFB$1:$XFB$" & newtracker
        .Values = "=Sheet1!$XFC$1:$XFC$" & newtracker
        .MarkerSize = 3
    End With

    With cht
        .HasTitle = True
        .ChartTitle.Characters.Text = "CFL Over Time"
        .Axes(xlCategory, xlPrimary).HasTitle = True
        .Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "Time (Days)"
        .Axes(xlValue, xlPrimary).HasTitle = True
        .Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "CFL"
        .Axes(xlCategory).HasMajorGridlines = True
        .Axes(xlCategory).HasMinorGridlines = True
    End With
End Sub
于 2012-12-17T22:19:10.053 回答