2017-02-13 4 views
0

У меня есть проблема с моим макросом, чтобы скопировать пасту только значения диапазона A6:AM46,A52:AM84 в AN6 местоположение на том же листе.Не правильно копировать значения

Sub PréparerGrilles() 


    Range("A6:AM46,A52:AM84").Select 
    Selection.Copy 

    Range("AN6").Select 
    Application.CutCopyMode = False 
    ActiveSheet.Paste 

End Sub 

Я получаю ошибку 1004 (множественный выбор) ошибки Не могли бы вы помочь мне с этим?

+0

Почему ваш код использует «A6: AL46, A52: AM84», когда ваш вопрос говорит «A6: AM84»? Вы не можете копировать несколько вариантов, если они имеют разные ширины строк и столбцов. – YowE3K

+0

Диапазон («A6: AM84») дает мне ту же проблему ... –

+0

(a) Использование 'Range (« A6: AL46, A52: AM84 »)' даст вам команду «Эта команда не может использоваться для нескольких выборов» ошибка. Использование 'Range (" A6: AM84 ")' даст вам ошибку «Вставить метод ошибки рабочего листа». Это не та же проблема. (b) Чтобы мы могли дать ответ, какой диапазон (ы) вы ** на самом деле ** пытаетесь скопировать? – YowE3K

ответ

1

Чтобы скопировать значения от от A6:AM46,A52:AM84 к AN6:BZ46,AN52:BZ84 вы можете сделать следующее:

Sub PreparerGrilles() 
    Range("AN6:BZ46").Value = Range("A6:AM46").Value 
    Range("AN52:BZ84").Value = Range("A52:AM84").Value 
End Sub 

Версия с использованием Range.Copy метода:

Sub PreparerGrilles() 
    Range("A6:AM46").Copy Destination:=Range("AN6:BZ46") 
    Range("A52:AM84").Copy Destination:=Range("AN52:BZ84") 
    Range("AN6:BZ46").Value = Range("AN6:BZ46").Value 
    Range("AN52:BZ84").Value = Range("AN52:BZ84").Value 
End Sub 

Я рекомендую вам не замедлит ваш код вниз, используя это. Это также приведет к потенциально неправильным значениям, если ваши формулы относятся ко всему, что не было частью копии.


Версия с использованием PasteSpecial xlPasteValues метода:

Sub PreparerGrilles() 
    Range("A6:AM46").Copy 
    Range("AN6:BZ46").PasteSpecial xlPasteValues 
    Range("A52:AM84").Copy 
    Range("AN52:BZ84").PasteSpecial xlPasteValues 
End Sub 

I сильно рекомендую использовать этот метод, так как это приводит к слишком много «невоспроизводимый» ошибки из-за пользователей копируют вещи через буфер обмена между когда ваш код выполняет Копирование и когда он вставляет Paste, а также из-за того, что ваша копия защелкнула все, что пользователь мог вручную вставить в буфер обмена.

+0

Это работает, но я хотел использовать метод копирования диапазона, спасибо –

+0

@NicoCoallier Почему вы хотите использовать метод «Range.Copy»? Есть ли необходимость разрешить пользователям случайно скопировать что-то в буфер обмена частично через ваш код, чтобы создать в нем случайный эффект ошибки? Есть ли необходимость сделать код немного медленнее по какой-то причине? – YowE3K

+0

Я хочу построить переключатель, в котором вы можете активировать формулу позже ... –

1

Application.CutCopyMode = False очищает буфер обмена ....

Лучше код, который:

Sub Test() 

    Dim wb As Workbook, ws As Worksheet 

    Set wb = ThisWorkbook 
    Set ws = wb.Sheets("SOMMAIRE") 'this means it will only work on this sheet, you should change the name of the sheet or ask me what do you want in order to get it working on other sheets 

    ws.Range("A6:AL46").Copy 
    ws.Range("AN6").PasteSpecial xlValues 

    ws.Range("A52:AM84").Copy 
    ws.Range("AN52").PasteSpecial xlValues 

End Sub 

Отредактировано: Теперь, когда необходимо сделать трюк. Попробуйте и скажите, работает ли он

Редактировано2: Это то, что вы хотите, по крайней мере, за то, что вы просили до сих пор.

+0

Вы не можете копировать диапазон 41 x 38 и диапазон 33 x 39 за один раз. (Вы ** можете ** скопировать 41 x 39 с 33 x 39 и, вероятно, 41 x 38 с 41 x 39, но если обе строки и столбцы разные, Excel не нравится.) – YowE3K

+0

Все еще дает мне ошибку 1004 –

+1

@NicoCoallier - Вы должны включить информацию о том, какую ошибку вы вносите в свой вопрос, - это останавливает людей, которые сбиваются с неправильного пути, пытаясь решить вашу проблему. (Но очистка буфера обмена установкой 'CutCopyMode' в False вызовет проблемы после исправления исходной ошибки.) – YowE3K

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