как обновить график с переменной? - PullRequest
0 голосов
/ 06 марта 2019

Надеюсь, что кто-то может помочь. У меня проблемы с чем-то, что должно быть действительно простым.

Я пытаюсь обновить диаграмму на основе изменения исходных данных (количество строк может измениться)

это мой код:

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 голосов
/ 07 марта 2019

Спасибо за комментарии и советы

Удалось разобраться в конце. Это потому, что я удалял ячейки, на которые ссылался график

ws.cells.delete

я изменил это на

ws.cells.clear

и проблемы больше не было.

0 голосов
/ 07 марта 2019

Вы, вероятно, должны убедиться, что 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, насколько я могу судить)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...