3

我有一张每天更新的 Excel 表格。我正在尝试使用每天添加的新数据(1 行)自动更新图表。

到目前为止,我有:

Sub UpdateGraphs()

    Dim latestRow As Integer

    Sheets("DailyJourneyProcessing").Select

    Range("A500").Select

    Do Until ActiveCell.Value = ""
        If ActiveCell.Value <> "" Then
            ActiveCell.Offset(1, 0).Select
        End If
    Loop

    ActiveCell.Offset(-1, 0).Select
    Application.CutCopyMode = False
    ActiveCell.EntireRow.Copy

    ActiveCell.Offset(1, 0).Select
    ActiveCell.EntireRow.PasteSpecial (xlPasteAll)

    Application.CutCopyMode = False

    latestRow = ActiveCell.row

    Dim str1 As String
    Dim rng1 As Range

    str1 = "=DailyJourneyProcessing!$F$180:$F$" & latestRow
    Set rng1 = Range(str1)

    Debug.Print "Got this far..."

    Set ActiveChart.SeriesCollection(1).Values = Range(str1)

我知道这看起来就像我只是复制了前一行,但公式中包含了数据的变化。

目前的整数/行在520左右,所以我想做:

ActiveChart.SeriesCollection(1).Values = "=DailyJourneyProcessing!$F$180:$F$520"

行号每天变化的地方。这是我需要自动化的大约 20 个范围更新之一,但是一旦我解决了一个,其他的应该是相同的。

我已经尝试了所有可以在网上找到的方法,但没有任何效果。

目前,我得到一个运行时错误 91: Object or With block variable not set。

任何帮助,将不胜感激。

4

1 回答 1

3

实际上不需要 VBA 来实现这一点。您会发现此链接中的方法比 VBA 代码更易于管理和维护。此外,最好不要在不需要时使用 VBA!

但是,为了让您可以看到一种更有效的方式来编写您想要做的事情,我提供了下面的代码。它很可能需要一些调整以适应您的实际数据集。

Sub UpdateGraphs()

    Dim wks As Worksheet, rng1 As Range
    Dim latestRow As Long ' changed to long to handle rows over 32,000 (whatever number Integer stops at)

    Set wks = Sheets("DailyJourneyProcessing")

    With wks

        latestRow = .Range("F" & .Rows.Count).End(xlUp).Row

        str1 = "=DailyJourneyProcessing!$F$180:$F$" & latestRow

        Set rng1 = Range(str1)

        Dim myChart As Chart
        Set myChart = .ChartObjects("myChartName")

        myChart.SeriesCollection(1).Values = rng1

    End With

End Sub
于 2012-10-25T15:49:22.303 回答