Диаграммы Excel VBA -> выбор диапазона с помощью ячеек в диаграммах

Я пытаюсь изменить существующий код VBA (Excel), который создает графики диаграмм, и сделать его более гибким.

Я знаю, что следующие фрагменты кода делают одно и то же:

Range(Cells(12, 2), Cells(15, 2)).Select    

более или менее идентичен:

Range("B12:B15").Select    

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

Поэтому я изменил существующий код:

ActiveChart.SetSourceData Source:=Sheets("Log-Data").Range("B12:B200"), PlotBy:=xlColumns    

to

Dim LastRow As Integer
LastRow = ActiveSheet.UsedRange.Rows(ActiveSheet.UsedRange.Rows.Count).Row    
ActiveChart.SetSourceData Source:=Sheets("Log-Data").Range(Cells(12, 2), Cells(LastRow, 2)), PlotBy:=xlColumns    

Теперь всякий раз, когда я выполняю код, я получаю:

Ошибка выполнения «1004»: ошибка, определяемая приложением или объектом.

Переменная LastRow не проблема: у меня будет тот же результат, если я заменю ее на 200.

Что я делаю не так?

Ваше здоровье

Питер


person PeterKallus    schedule 05.04.2013    source источник
comment
Всякий раз, когда вы используете sheetname.Range(Cells(a,b), Cells(a2,b2)), вы всегда должны уточнять каждый Cells() ссылкой на лист: в противном случае Cells() всегда будет ссылаться на ActiveSheet, что может быть не так, как вы предполагали.   -  person Tim Williams    schedule 05.04.2013


Ответы (3)


LastRow = ActiveSheet.UsedRange.Rows(ActiveSheet.UsedRange.Rows.Count).Row

и

LastRow = ActiveSheet.UsedRange.Rows.Count

одинаковые.

Что касается фактической ошибки, похоже, что у вас нет активного объекта диаграммы при запуске кода. Итак, ActiveChart. возвращает ошибку объекта.

Попробуй это:

Dim LastRow As Integer
LastRow = ActiveSheet.UsedRange.Rows.Count
ActiveSheet.Shapes.AddChart.Select
ActiveChart.SetSourceData Source:=Sheets("Log-Data").Range(Cells(12, 2), Cells(LastRow, 2)), PlotBy:=xlColumns
person 273K Kool    schedule 23.07.2013

Я пробовал следующее, и это работает (добавляя точку перед словом Cells)

Dim LastRow As Integer
LastRow = ActiveSheet.UsedRange.Rows.Count

With Sheets("Log-Data")
Set Myrange = .Range(.Cells(12, 2), .Cells(LastRow, 2))
End With

ActiveSheet.Shapes.AddChart.Select
ActiveChart.SetSourceData Source:=Myrange, PlotBy:=xlColumns
person user3962941    schedule 21.08.2014

Попробуйте ниже и дайте мне знать

Dim LastRow As Integer
LastRow = ActiveSheet.UsedRange.Rows.Count

With Sheets("Log-Data")
Set Myrange = .Range(Cells(12, 2), Cells(LastRow, 2))
End With

ActiveSheet.Shapes.AddChart.Select
ActiveChart.SetSourceData Source:=Myrange, PlotBy:=xlColumns
person Sanjay Narayan    schedule 24.02.2014