2015-04-08 3 views
1

У меня есть следующий код, в котором я пытаюсь скопировать данные с одного листа на другой в той же книге. Когда я запускаю код, я получаю ошибку Runtime -438Ошибка времени выполнения - 438

Sub Copy() 

Sheets("Sheet1").Range("A1:D20").Copy 

Sheets("Sheet2").Activate 

Range("E1").Select 

ActiveSheet.Paste 

Application.CutCopyMode = False 

End Sub 

ответ

2

Попробуйте использовать следующий код. Вы не должны полагаться на Активировать и Выбрать.

Sub ZCopy() 
    Sheets("Sheet1").Range("A1:D20").Copy 
    Sheets("Sheet1").Paste Destination:=Worksheets("Sheet2").Range("E1") 
    Application.CutCopyMode = False 
End Sub 

Интересный Читает

  1. MSDN
  2. How to avoid using Select in Excel VBA macros
+0

Это дает мне ошибку, говоря: «Member уже существует в объектном модуле, из которого этот объектный модуль получает» – taz

+0

Похоже, у вас уже есть подканал с таким именем, которое уже присутствует в вашем проекте. –

+0

Теперь работает отлично. – taz

1

Есть ли у вас определенная необходимости копировать и вставлять? Это может быть медленным и неэффективным. Если вы просто копируете данные с одного листа на другой, вы можете установить значения одного диапазона, равные значениям другого диапазона, и избежать всего этого.

Sheets("Sheet2").Range("E1:H20").Value = Sheets("Sheet1").Range("A1:D20").Value 

Это позволит установить диапазон от клеток E1: H20 на Sheet2 то же значение, как те, в диапазоне A1: D20 на Лист1, который фактически является копирование и вставка. Я должен добавить, что это будет работать только для самих значений.

Если есть определенное форматирование (или формулы), которое вам нужно скопировать и вставить, этот метод не будет работать.

+1

Это более легкое решение в случае, если OP не нуждается в форматировании или формуле –

Смежные вопросы