我有一个每天更新的 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 个范围更新之一,但一旦我解决了其中一个,其他的应该是相同的。
我已经尝试了网上能找到的所有方法,但没有任何效果。
目前,我收到运行时错误 91:未设置对象或 With block 变量。
如有任何帮助,我们将不胜感激。
最佳答案
实际上不需要 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
关于vba - Excel 2010 VBA - 使用变量定义的范围更新图形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13072096/