#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.