2016-08-02 2 views
0

У меня есть следующий VBA макрос:Копирование же выбор в нескольких листах

Sub test() 
For Each wks In ThisWorkbook.Worksheets 
Range("J1:Q300").Copy 
Range("A301:H601").PasteSpecial Paste:=xlPasteValues 
Application.CutCopyMode = False 
Next 
End Sub 

Идея заключается в том, чтобы скопировать диапазон «J1: Q300» в «A301: H601» в каждом из 100 листов в моем Excel файл. Вышеприведенный макрос не дает мне сообщения об ошибке, но, похоже, работает только на первом листе.

У вас есть идеи, что может быть ошибкой в ​​моем коде?

+0

у вас действительно есть строка 'Dim wks As Worksheet'? –

+0

Hi Shai, нет, я забыл об этом, но, хотя я сказал, что он все еще не работает. Кажется, что он работает только на листе, который выбран в момент запуска макроса. – Michi

+0

см. Ответ ниже, вам нужно добавить добавить 'wks.Range' –

ответ

1

Вам нужно добавить текущий объект WKS на свой диапазон:

Sub test() 

Dim wks As Worksheet 

For Each wks In ThisWorkbook.Worksheets 
    wks.Range("J1:Q300").Copy 
    wks.Range("A301:H601").PasteSpecial Paste:=xlPasteValues 
    Application.CutCopyMode = False 
Next wks 

End Sub 
1

Если вы просто используете Range(), вы всегда будете ссылаться на текущий активный рабочий лист.
Вы должны либо изменить текущий активный рабочий лист или просто быть более конкретным путем подачи wks.Range():

Sub test() 
    For Each wks In ThisWorkbook.Worksheets 
    wks.Range("J1:Q300").Copy 
    wks.Range("A301:H601").PasteSpecial Paste:=xlPasteValues 
    Application.CutCopyMode = False 
    Next 
End Sub 
Смежные вопросы