2012-10-25 77 views
3

我有一个每日更新的Excel工作表。我试图用每天添加的新数据(1行)自动更新图形。Excel 2010 VBA - 更新图表使用变量定义的范围

到目前为止,我有:

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:对象或块变量未设置。

任何帮助,将不胜感激。

回答

3

实际上VBA没有必要完成这个任务。您会发现在this link中的方法比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 
+0

这两种方法都很好,非常感谢。 – user1774673