希望有人可以帮助我解决一些本来应该很简单的问题。
我正在尝试基于更改源数据(行数可以更改)来更新图表
这是我的代码:
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
答案 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
不再有问题。