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)

これは前の行をコピーしただけのように見えますが、含まれている式はデータの変更を反映しています。

現時点での Integer / row は約 520 であるため、次のようにします。

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

行番号が毎日変わる場所。これは、自動化する必要がある約 20 の範囲の更新の 1 つですが、1 つを解決すると、他の更新も同じになるはずです。

オンラインで見つけられるものはすべて試しましたが、うまくいきませんでした。

現時点では、実行時エラー 91 が発生します: オブジェクトまたはブロック変数が設定されていません。

どんな助けでも大歓迎です。

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 に答える