Как получить диапазон ячеек в Excel vba, берущих данные с другого листа?

#vba #excel

#vba #преуспеть

Вопрос:

Я пытаюсь получить данные для графика на листе книги Excel с помощью VBA. Диапазон данных, которые мне нужны, находится в той же книге, но на другом листе.

Мне нужно записать этот диапазон в формате ячеек, потому что столбец не всегда один и тот же, он меняется при каждом выполнении, я имею в виду:

 Range(Cells(3,5),Cells(3,column).value
 

Проблема возникает, когда я беру данные с другого листа.

Если я напишу:

 ActiveChart.SeriesCollection(1).Values = ActiveSheet.Range(Cells(3,5),Cells(3,column).Value
 

У меня нет никаких проблем, все в порядке. Но когда я беру данные с другого листа:

 ActiveChart.SeriesCollection(1).Values = Sheets("Data").Range(Cells(3,5),Cells(3,column).Value
 

Я получаю

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

Это происходит только тогда, когда я использую формат ячеек для указания диапазона. Если я использую формат Range("E5:J5").Value , у меня нет проблем с таблицей данных, но в этом формате я не могу или не знаю, как указать столбец в каждом выполнении.

Комментарии:

1. Какое значение column имеет, когда вы получаете сообщение об ошибке?

2. Является целым числом, которое изменяется внутри цикла For Next. Но если я всегда помещаю определенное целое число без изменений вне цикла, это все равно не работает.

Ответ №1:

Вы получаете сообщение об ошибке из-за Cells неправильной квалификации. Это означает, что в этом фрагменте кода,

 Sheets("Data").Range(Cells(3,5),Cells(3,column)).Value
 

то, что вы неявно говорите, это

 Sheets("Data").Range(ActiveSheet.Cells(3,5),ActiveSheet.Cells(3,column)).Value
 

что явно не имеет смысла, потому ActiveSheet что это другой лист, чем Sheets("Data") .

Вы можете сделать это вместо:

 Sheets("Data").Range("E3").Resize(1, rangeWidth).Value
 

В вашем конкретном случае вы можете заменить rangeWidth на column - 4 поскольку столбец E равен столбцу 5.