Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Копирование диапазона без использования Select - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
Страница 1 из 11
Модератор форума: _Boroda_, Pelena, Manyasha, SLAVICK 
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Копирование диапазона без использования Select (Макросы/Sub)
Копирование диапазона без использования Select
ees Дата: Среда, 08.11.2017, 16:20 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 15
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Добрый день!

Столкнулся с проблемой при копировании диапазона с одного листа на другой без использования select и activate.

В интернете нашел такой механизм:

[vba]
Код
Dim Rng2 As Range
Dim Rng1 As Range

Set Rngl = Sheets(s0).Range(Cells(x0, y0), Cells(z0, n0))
Set Rng2 = Sheets(s1).Range(Cells(x1, y1), Cells(z1, n1))

Rngl.Copy Rng2
[/vba]

Если s0=s1, то все работает, а вот если нет, то выдает ошибку "Run-time error '1004'"
Что бы всё работало необходимо добавить активацию листов.

[vba]
Код

Dim Rng2 As Range
Dim Rng1 As Range

Worksheets(s0).Activate
Set Rngl = Sheets(s0).Range(Cells(x0, y0), Cells(z0, n0))

Worksheets(s1).Activate
Set Rng2 = Sheets(s1).Range(Cells(x1, y1), Cells(z1, n1))

Rngl.Copy Rng2
[/vba]

Вопрос в следующем, возможно ли как то при копировании диапазона из одного листа в другой обойтись без "Activate"?

Спасибо!


Сообщение отредактировал ees - Среда, 08.11.2017, 17:00
 
Ответить
СообщениеДобрый день!

Столкнулся с проблемой при копировании диапазона с одного листа на другой без использования select и activate.

В интернете нашел такой механизм:

[vba]
Код
Dim Rng2 As Range
Dim Rng1 As Range

Set Rngl = Sheets(s0).Range(Cells(x0, y0), Cells(z0, n0))
Set Rng2 = Sheets(s1).Range(Cells(x1, y1), Cells(z1, n1))

Rngl.Copy Rng2
[/vba]

Если s0=s1, то все работает, а вот если нет, то выдает ошибку "Run-time error '1004'"
Что бы всё работало необходимо добавить активацию листов.

[vba]
Код

Dim Rng2 As Range
Dim Rng1 As Range

Worksheets(s0).Activate
Set Rngl = Sheets(s0).Range(Cells(x0, y0), Cells(z0, n0))

Worksheets(s1).Activate
Set Rng2 = Sheets(s1).Range(Cells(x1, y1), Cells(z1, n1))

Rngl.Copy Rng2
[/vba]

Вопрос в следующем, возможно ли как то при копировании диапазона из одного листа в другой обойтись без "Activate"?

Спасибо!

Автор - ees
Дата добавления - 08.11.2017 в 16:20
sboy Дата: Среда, 08.11.2017, 16:28 | Сообщение № 2
Группа: Проверенные
Ранг: Старожил
Сообщений: 1103
Репутация: 276 ±
Замечаний: 0% ±

Excel 2010
Добрый день.
Можно.
Оформите код тегами, кнопка # на панели
 
Ответить
СообщениеДобрый день.
Можно.
Оформите код тегами, кнопка # на панели

Автор - sboy
Дата добавления - 08.11.2017 в 16:28
ees Дата: Среда, 08.11.2017, 17:00 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 15
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Код оформил.
А как можно обойтись без активации листов?
 
Ответить
СообщениеКод оформил.
А как можно обойтись без активации листов?

Автор - ees
Дата добавления - 08.11.2017 в 17:00
sboy Дата: Среда, 08.11.2017, 17:06 | Сообщение № 4
Группа: Проверенные
Ранг: Старожил
Сообщений: 1103
Репутация: 276 ±
Замечаний: 0% ±

Excel 2010
Добрый
вот так попробуйте
[vba]
Код
Dim Rng2 As Range
Dim Rng1 As Range

Set Rng1 = Range(Sheets(s0).Cells(x0, y0), Sheets(s0).Cells(z0, n0))
Set Rng2 = Range(Sheets(s1).Cells(x1, y1), Sheets(s1).Cells(z1, n1))

Rngl.Copy Rng2
[/vba]
 
Ответить
СообщениеДобрый
вот так попробуйте
[vba]
Код
Dim Rng2 As Range
Dim Rng1 As Range

Set Rng1 = Range(Sheets(s0).Cells(x0, y0), Sheets(s0).Cells(z0, n0))
Set Rng2 = Range(Sheets(s1).Cells(x1, y1), Sheets(s1).Cells(z1, n1))

Rngl.Copy Rng2
[/vba]

Автор - sboy
Дата добавления - 08.11.2017 в 17:06
ees Дата: Среда, 08.11.2017, 17:24 | Сообщение № 5
Группа: Пользователи
Ранг: Новичок
Сообщений: 15
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Спасибо.
Теперь вышла 424 ошибка...
 
Ответить
СообщениеСпасибо.
Теперь вышла 424 ошибка...

Автор - ees
Дата добавления - 08.11.2017 в 17:24
sboy Дата: Среда, 08.11.2017, 17:26 | Сообщение № 6
Группа: Проверенные
Ранг: Старожил
Сообщений: 1103
Репутация: 276 ±
Замечаний: 0% ±

Excel 2010
тогда кладите файл с полным кодом, гадать смысла нет
 
Ответить
Сообщениетогда кладите файл с полным кодом, гадать смысла нет

Автор - sboy
Дата добавления - 08.11.2017 в 17:26
Wasilich Дата: Среда, 08.11.2017, 21:17 | Сообщение № 7
Группа: Друзья
Ранг: Старожил
Сообщений: 1206
Репутация: 320 ±
Замечаний: 0% ±

2003
s0 и s1 это имена листов или переменные? Координаты - тоже переменные?
Где это видно, что они (переменные) адекватные. :)
Попробуйте внести имена и координаты напрямую в отдельный код и проверьте.
[vba]
Код
Sub www()
  Dim Rng2 As Range
  Dim Rng1 As Range
  Set Rngl = Sheets("Имя0").Range(Cells(1, 1), Cells(10, 10))
  Set Rng2 = Sheets("Имя1").Cells(1, 1)
  Rngl.Copy Rng2
End Sub
[/vba]
 
Ответить
Сообщениеs0 и s1 это имена листов или переменные? Координаты - тоже переменные?
Где это видно, что они (переменные) адекватные. :)
Попробуйте внести имена и координаты напрямую в отдельный код и проверьте.
[vba]
Код
Sub www()
  Dim Rng2 As Range
  Dim Rng1 As Range
  Set Rngl = Sheets("Имя0").Range(Cells(1, 1), Cells(10, 10))
  Set Rng2 = Sheets("Имя1").Cells(1, 1)
  Rngl.Copy Rng2
End Sub
[/vba]

Автор - Wasilich
Дата добавления - 08.11.2017 в 21:17
Hugo Дата: Среда, 08.11.2017, 22:09 | Сообщение № 8
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2693
Репутация: 601 ±
Замечаний: 0% ±

Wasilich, перед cells всегда нужно указывать владельца, иначе полезет на активный лист, ну или на лист где расположен код.
Правильно sboy предложил.


excel@nxt.ru
webmoney: E265281470651 R418926282008 Z422237915069
 
Ответить
СообщениеWasilich, перед cells всегда нужно указывать владельца, иначе полезет на активный лист, ну или на лист где расположен код.
Правильно sboy предложил.

Автор - Hugo
Дата добавления - 08.11.2017 в 22:09
InExSu Дата: Среда, 08.11.2017, 23:30 | Сообщение № 9
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 230
Репутация: 28 ±
Замечаний: 80% ±

Excel 2010
[vba]
Код
Sub ПереБдить()
    Dim Rng2 As Range, Rng1 As Range

    With Sheets(s0)
        Set Rngl = .Range(.Cells(x0, y0), .Cells(z0, n0))
    End With
    With Sheets(s1)
        Set Rng2 = .Range(.Cells(x1, y1), .Cells(z1, n1))
    End With

    Rngl.Copy Rng2

End Sub
[/vba]
 
Ответить
Сообщение[vba]
Код
Sub ПереБдить()
    Dim Rng2 As Range, Rng1 As Range

    With Sheets(s0)
        Set Rngl = .Range(.Cells(x0, y0), .Cells(z0, n0))
    End With
    With Sheets(s1)
        Set Rng2 = .Range(.Cells(x1, y1), .Cells(z1, n1))
    End With

    Rngl.Copy Rng2

End Sub
[/vba]

Автор - InExSu
Дата добавления - 08.11.2017 в 23:30
Hugo Дата: Четверг, 09.11.2017, 00:31 | Сообщение № 10
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2693
Репутация: 601 ±
Замечаний: 0% ±

Вообще надёжнее[vba]
Код
Set Rng2 = Sheets(s1).Cells(x1, y1)
[/vba]
и проще - не нужно отслеживать z1, n1


excel@nxt.ru
webmoney: E265281470651 R418926282008 Z422237915069
 
Ответить
СообщениеВообще надёжнее[vba]
Код
Set Rng2 = Sheets(s1).Cells(x1, y1)
[/vba]
и проще - не нужно отслеживать z1, n1

Автор - Hugo
Дата добавления - 09.11.2017 в 00:31
alex77755 Дата: Четверг, 09.11.2017, 05:54 | Сообщение № 11
Группа: Проверенные
Ранг: Обитатель
Сообщений: 317
Репутация: 58 ±
Замечаний: 0% ±

[vba]
Код
Sub ещё_проще()
Sheets("Имя0").Cells(1, 1).Resize(10, 10).Copy Sheets("Имя1").Cells(1, 1)
End Sub
[/vba]


Могу помочь в VB6, VBA
Alex77755@mail.ru
 
Ответить
Сообщение[vba]
Код
Sub ещё_проще()
Sheets("Имя0").Cells(1, 1).Resize(10, 10).Copy Sheets("Имя1").Cells(1, 1)
End Sub
[/vba]

Автор - alex77755
Дата добавления - 09.11.2017 в 05:54
ees Дата: Четверг, 09.11.2017, 11:59 | Сообщение № 12
Группа: Пользователи
Ранг: Новичок
Сообщений: 15
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Всем большое спасибо за помощь!

Использовал

[vba]
Код
Sub ПереБдить()
    Dim Rng2 As Range, Rng1 As Range

    With Sheets(s0)
        Set Rngl = .Range(.Cells(x0, y0), .Cells(z0, n0))
    End With
    With Sheets(s1)
        Set Rng2 = .Range(.Cells(x1, y1), .Cells(z1, n1))
    End With

    Rngl.Copy Rng2

End Sub
[/vba]
 
Ответить
СообщениеВсем большое спасибо за помощь!

Использовал

[vba]
Код
Sub ПереБдить()
    Dim Rng2 As Range, Rng1 As Range

    With Sheets(s0)
        Set Rngl = .Range(.Cells(x0, y0), .Cells(z0, n0))
    End With
    With Sheets(s1)
        Set Rng2 = .Range(.Cells(x1, y1), .Cells(z1, n1))
    End With

    Rngl.Copy Rng2

End Sub
[/vba]

Автор - ees
Дата добавления - 09.11.2017 в 11:59
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Копирование диапазона без использования Select (Макросы/Sub)
Страница 1 из 11
Поиск:

Яндекс цитирования
© 2010-2017 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!