Страницы: 1
RSS
присвоение значений из активной книги, ошибка Application-defined or object-defined error
 
Привет ребят. Что-то я не пойму, пытаюсь присвоить диапазон значений из активной книги в неактивную. Такой код работает:
Код
Workbooks("на проверку.xlsx").Sheets("реестр").Range("B4:D6") = Range(Cells(2, 11), Cells(4, 13)).Value 

но такой код выдает ошибку "Application-defined or object-defined error":
Код
Workbooks("на проверку.xlsx").Sheets("реестр").Range(Cells(4, 2), Cells(6, 4)) = Range(Cells(2, 11), Cells(4, 13)).Value

Мне нужен второй вариант, чтобы вместо констант подставлять переменные. Почему он не работает?
Изменено: VISXAN - 31.07.2013 00:19:31
 
Потому что cells берутся все с одного листа, а Range c разных.
Обычная ошибка...
 
Попробуйте так:
Код
    With Workbooks("на проверку.xlsx").Sheets("реестр")
        Range(.Cells(4, 2), .Cells(6, 4)) = Range(Cells(2, 11), Cells(4, 13)).Value
    End With
 
Hugo, спасибо - работает
 
Hugo, Подскажите где об этом прочитать.
Все что нашел в интернете по поводу range(cells()) про это свойство умалчивают.
Это заговор?
Такой кусок тоже не работает. Копирование в пределах одного листа. Если заменить cells на "a6:J7", то все работает.
Что не так?
Код
  With Sheets(datetime)
     Range(Cells(6, 1), Cells(7, 10)).Copy Worksheets(datetime).Range(Cells(7, 1))
  End With
Изменено: ncux199rus - 20.04.2016 15:23:09
 
Цитата
ncux199rus написал: Это заговор?
- похоже на то...
Цитата
ncux199rus написал: Что не так?
- точек нет. Смотрите внимательнее на пример, ну или почитайте как применяется with.
Достаточно
Код
With Sheets(datetime)
     Range(.Cells(6, 1), .Cells(7, 10)).Copy .Cells(7, 1)
  End With

Ну и может быть нужна точка перед Range - смотря где код. Наверное...
Изменено: Hugo - 20.04.2016 15:31:55
 
Цитата
ncux199rus написал: Что не так?
конструкция With Sheets(datetime) используется для того чтобы не писать
Код
 
 Sheets(datetime).Range(Sheets(datetime).Cells(6, 1), Sheets(datetime).Cells(7, 10)).Copy
Cells(6, 1) без явного указания листа подразумевает обращение к ячейке активного листа.
Цитата
в интернете по поводу range(cells()) про это свойство умалчивают.
поищите использование With vba.
 
Dima S, Hugo,Спасибо.
Заработало. Перед range нужна точка.
С with примерно понятно, но все равно точки пришлось научным методом подбирать.
Код
With Sheets(datetime)
        .Range(.Cells(6, 1), .Cells(7, 10)).Copy .Cells(7, 1)
End With

Спасибо.
 
Цитата
ncux199rus написал: научным методом
научным - это взять и справку почитать, а так - метод тыка)
 
Я думаю что точка перед Range нужна если код в модуле другого листа, а если в стандартном модуле - то нужны точки только перед Cells. Но проверять некогда.
В остальном с with никаких заморочек нет.
Страницы: 1
Наверх