Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.06.2012, 12:27   #11
Slavutich_RED
Пользователь
 
Регистрация: 30.03.2009
Сообщений: 10
Вопрос

Цитата:
Сообщение от EducatedFool Посмотреть сообщение
Пробуем:
Код:
Sub test()
    коорд1 = 4: коорд2 = 3
    коорд3 = 7: коорд4 = 11

    Range(Cells(коорд1, коорд2), Cells(коорд3, коорд4)).Select
End Sub
Не поверите - работает...
Select

Помогите -
Код:
    ThisWorkbook.Worksheets("Model1").Range("A1:D4").Copy _
    Destination:=ThisWorkbook.Worksheets("VhodMod1").Range("E5")
работает на ура

но надо

Код:
x1 = 2: y1 = 21
x2 = 2: y2 = 42

ThisWorkbook.Worksheets("Model1").Range(Cells(x1, y1), Cells(x2, y2)).Copy _
Destination:=ThisWorkbook.Worksheets("VhodMod1").Range(Cells(x1, y1))
но он (последний) выдает ошибку 1004

Что в моем коде не так?
Slavutich_RED вне форума Ответить с цитированием
Старый 26.06.2012, 12:38   #12
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Цитата:
Что в моем коде не так?
Ссылку на неактивный лист нужно делать при КАЖДОМ обращении к ячейке этого листа. В Вашем случае, при условии, что активен лист ThisWorkbook.Worksheets("Model1"), можно, например, так:
Код:
With ThisWorkbook.Worksheets("VhodMod1")
    Range(Cells(x1, y1), Cells(x2, y2)).Copy .Range(.Cells(x1, y1))
End With
Если же лист ThisWorkbook.Worksheets("Model1") не активен, то ссылку на него потребуется сделать перед каждым Range и Cells, которые определяют копируемый диапазон.
Чем шире угол зрения, тем он тупее.

Последний раз редактировалось SAS888; 26.06.2012 в 12:46. Причина: Добавлено
SAS888 вне форума Ответить с цитированием
Старый 26.06.2012, 12:54   #13
Slavutich_RED
Пользователь
 
Регистрация: 30.03.2009
Сообщений: 10
Хорошо

Цитата:
Сообщение от SAS888 Посмотреть сообщение
Ссылку на неактивный лист нужно делать при КАЖДОМ обращении к ячейке этого листа. В Вашем случае, при условии, что активен лист ThisWorkbook.Worksheets("Model1"), можно, например, так:
Код:
With ThisWorkbook.Worksheets("VhodMod1")
    Range(Cells(x1, y1), Cells(x2, y2)).Copy .Range(.Cells(x1, y1))
End With
Если же лист ThisWorkbook.Worksheets("Model1") не активен, то ссылку на него потребуется сделать перед каждым Range и Cells.
Хммм а код ThisWorkbook.Worksheets("Model1").R ange("A1:D4").Copy _
Destination:=ThisWorkbook.Worksheet s("VhodMod1").Range("E5")
работал невзирая на то кто активен, но все равно спасибо - помогло дописывание перед кодом строки ThisWorkbook.Worksheets("Model1").A ctivate
Slavutich_RED вне форума Ответить с цитированием
Старый 26.06.2012, 13:01   #14
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Цитата:
Хммм а код ThisWorkbook.Worksheets("Model1").R ange("A1:D4").Copy _
Destination:=ThisWorkbook.Worksheet s("VhodMod1").Range("E5")
работал невзирая на то кто активен
Посмотрите внимательно: в такой записе ссылка на лист присутствует при каждом обращении к Range.
Цитата:
помогло дописывание перед кодом строки ThisWorkbook.Worksheets("Model1").A ctivate
Активировать лист - это лишнее. Я бы поступил так:
Код:
Dim ws1 As Worksheet, ws2 As Worksheet
Set ws1 = ThisWorkbook.Worksheets("Model1")
Set ws2 = ThisWorkbook.Worksheets("VhodMod1")
ws1.Range(ws1.Cells(x1, y1), ws1.Cells(x2, y2)).Copy ws2.Range(ws2.Cells(x1, y1))
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 26.06.2012, 13:10   #15
Slavutich_RED
Пользователь
 
Регистрация: 30.03.2009
Сообщений: 10
Вопрос

Цитата:
Сообщение от SAS888 Посмотреть сообщение
Ссылку на неактивный лист нужно делать при КАЖДОМ обращении к ячейке этого листа. В Вашем случае, при условии, что активен лист ThisWorkbook.Worksheets("Model1"), можно, например, так:
Код:
With ThisWorkbook.Worksheets("VhodMod1")
    Range(Cells(x1, y1), Cells(x2, y2)).Copy .Range(.Cells(x1, y1))
End With
Если же лист ThisWorkbook.Worksheets("Model1") не активен, то ссылку на него потребуется сделать перед каждым Range и Cells, которые определяют копируемый диапазон.
Аннет - работает:
Код:
  ThisWorkbook.Worksheets("Model1").Activate
  ThisWorkbook.Worksheets("Model1").Range(Cells(x1, y1), Cells(x2, y2)).Copy _
    Destination:=ThisWorkbook.Worksheets("VhodMod1").Range("E2")
а вот вариант

Код:
  ThisWorkbook.Worksheets("Model1").Activate
  ThisWorkbook.Worksheets("Model1").Range(Cells(x1, y1), Cells(x2, y2)).Copy _
    Destination:=ThisWorkbook.Worksheets("VhodMod1").Range(ThisWorkbook.Worksheets("VhodMod1").Cells(x1, y1))
валит все ту же 1004 ую ошибку - а надо как то так - я незнаю на перекд в какую ячейку надо вставлять - х и у вычисляются динамически
Slavutich_RED вне форума Ответить с цитированием
Старый 26.06.2012, 13:13   #16
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Вы упорно допускаете одну и ту же ошибку: не перед каждым Range и Cells у вас есть необходимые ссылки на лист.
См. мой пример в посте №14
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 26.06.2012, 13:16   #17
Slavutich_RED
Пользователь
 
Регистрация: 30.03.2009
Сообщений: 10
Печаль

Цитата:
Сообщение от SAS888 Посмотреть сообщение
Посмотрите внимательно: в такой записе ссылка на лист присутствует при каждом обращении к Range.
Активировать лист - это лишнее. Я бы поступил так:
Код:
Dim ws1 As Worksheet, ws2 As Worksheet
Set ws1 = ThisWorkbook.Worksheets("Model1")
Set ws2 = ThisWorkbook.Worksheets("VhodMod1")
ws1.Range(ws1.Cells(x1, y1), ws1.Cells(x2, y2)).Copy ws2.Range(ws2.Cells(x1, y1))
неа - не работает - валит 1004 ошибку но пояснение в ней теперь "Method Range of object _Worksheet failed"
Slavutich_RED вне форума Ответить с цитированием
Старый 26.06.2012, 13:19   #18
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Укажите полный диапазон для вставки:
Код:
ws1.Range(ws1.Cells(x1, y1), ws1.Cells(x2, y2)).Copy ws2.Range(ws2.Cells(x1, y1), ws2.Cells(x2, y2))
Чем шире угол зрения, тем он тупее.

Последний раз редактировалось SAS888; 26.06.2012 в 13:24.
SAS888 вне форума Ответить с цитированием
Старый 26.06.2012, 13:26   #19
Slavutich_RED
Пользователь
 
Регистрация: 30.03.2009
Сообщений: 10
По умолчанию

Цитата:
Сообщение от SAS888 Посмотреть сообщение
Проверьте, правильно ли прописаны имена рабочих листов? Существуют ли они? Какие типы и какие значения имеют переменные x1, y1, x2 и y2?
Листы существуют, при указании адресов аля "E5" по крайней мере существуют (может при Cells(x1, y1) они исчезают);

в начале процедуры прописано
x1 = 2: y1 = 21
x2 = 2: y2 = 42
Slavutich_RED вне форума Ответить с цитированием
Старый 26.06.2012, 13:26   #20
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Если требуются только значения, то можно и без копирования:
Код:
ws2.Range(ws2.Cells(x1, y1), ws2.Cells(x2, y2)) = ws1.Range(ws1.Cells(x1, y1), ws1.Cells(x2, y2)).Value
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
текст из нескольких ячеек в одну Tirendus Microsoft Office Excel 10 20.01.2016 16:45
Выделение группы ячеек t0xa Microsoft Office Excel 1 19.09.2009 18:21
Выделение ячеек в опредленном столбце Busine2009 Microsoft Office Word 2 02.06.2009 21:33
Создание списка из нескольких ячеек DragonTM Microsoft Office Excel 6 30.10.2008 15:46
Фиксирование нескольких ячеек lusui HTML и CSS 4 22.01.2008 17:54