如何用变量更新图表?

时间:2019-03-06 20:33:10

标签: excel vba

希望有人可以帮助我解决一些本来应该很简单的问题。

我正在尝试基于更改源数据(行数可以更改)来更新图表

这是我的代码:

lastRow = GetLastRow(ChartSourceSheet)
ActiveChart.SetSourceData Source:=Sheets("ChartSource").Range("A1:C" & lastRow)

由于某种原因它不起作用(getlastrow函数只是一个返回工作表的最后一行号的函数,在这种情况下,我的测试数据为5)

但是如果我硬编码将其更改为:

lastRow = 5
ActiveChart.SetSourceData Source:=Sheets("ChartSource").Range("A1:C" & lastRow)

然后它绝对好用,这让我发疯,试图找出原因。

我尝试将lastRow声明为整数,但是它不起作用。

有人知道我可以尝试什么吗?

编辑回复:

不起作用意味着图表只是不更新​​,并且当我手动查看数据范围时,它还没有更新(与我对值进行硬编码和更新的情况相比),我也尝试将lastRow设置为long也没有帮助。

我的函数工作正常,因为它返回了期望值(5),但出于完成目的,这是我的函数的代码:

Function GetLastRow(sheetName As Worksheet)
GetLastRow = 1
On Error Resume Next
GetLastRow = sheetName.Cells.Find("*", searchorder:=xlByRows, searchdirection:=xlPrevious).Row
On Error GoTo 0
End Function

2 个答案:

答案 0 :(得分:0)

您应该确保GetLastRow()返回一个Long变量:

Sub doChart()
Dim lastRow As Long
lastRow = GetLastRow(Sheets("Sheet1")) ' Change to whatever you need
' Next line requires the chart to be active.  You'd be better off actually directly
' calling it, but that's for you to tweak. If there's only one chart, 
' then try Charts(1).SetSourceData ...
ActiveChart.SetSourceData Source:=Sheets("ChartSource").Range("A1:C" & lastRow)
End Sub

Function GetLastRow(sheetName As Worksheet) As Long
GetLastRow = 1
GetLastRow = sheetName.Cells.Find("*", searchorder:=xlByRows, searchdirection:=xlPrevious).Row
End Function

此外,我删除了函数中的On Error ...,因为不应该有任何错误,如果有的话最好进行处理。 (据我所知,最坏的情况是返回1

答案 1 :(得分:0)

感谢您的评论和建议

最后设法弄清楚了。 这是因为我正在删除图形所引用的单元格

ws.cells.delete

我将其更改为

ws.cells.clear

不再有问题。