Автофильтр, Копировать столбцы, Специальная вставка (только значения) в первую открытую ячейку в другой электронной таблице

Я работаю над масштабным проектом и столкнулся с непредвиденной трудностью. Я не думал, что мне понадобится такой сложный код, но он мне нужен. Я вырезал и вставил части кода, которые, как мне кажется, мне нужны, но я продолжаю получать ошибки при попытке запустить его. Вот то, что у меня есть до сих пор, и я знаю, что совсем немного отсутствует. Я собираюсь опубликовать код, который у меня есть, и посмотреть, может ли кто-нибудь помочь мне найти недостающие части. Я надеюсь, что мои намерения относительно кода ясны:

Автофильтр, скопируйте столбцы из отфильтрованных данных, затем вставьте лист «Общий уровень» в первую открытую ячейку в столбце B, а затем у меня есть формула автоматического заполнения для столбца A на основе столбца B.

Sub PullNewstsfromMPtoGL()

Sheets("Master Placement").Range("$A$1:$AX999999").AutoFilter Field:=6, Criteria1:="N"

Sheets("Master Placement").Range("A:I,AA:AC,AN:AQ").Copy

Sheets("General Level").Select
Range("B1").End(xlDown).Offset(1, 0).Select
Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
        xlNone, SkipBlanks:=False, Transpose:=False

Dim lastRow As Long
lastRow = Range("B" & Rows.Count).End(xlUp).Row
Range("A2").AutoFill Destination:=Range("A2:A" & lastRow)

person kcappy    schedule 23.04.2014    source источник
comment
Я немного сократил формулу и решил самостоятельно автофильтровать данные и смог какое-то время успешно использовать следующий код; однако теперь он дает мне сообщение об ошибке. Вот код: Sheets("MASTER PLACEMENT").Range("A:I,AA:AC,AN:AQ").Copy Sheets("General Level").Range("B1").End(xlDown).Offset(1, 0).PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _ xlNone, SkipBlanks:=False, Transpose:=False Вот сообщение об ошибке: Не удалось выполнить метод PasteSpecial класса Range.   -  person kcappy    schedule 23.04.2014


Ответы (1)


Я думаю, что здесь может быть более одной проблемы. Причина, по которой вы получаете сообщение об ошибке, заключается в том, что вы не можете ничего вставить в ячейки, выходящие за границы целевого листа, даже если скопированные ячейки пусты. Однако ошибка, которую я получаю при запуске вашего первоначально опубликованного кода: >

Когда вы копируете отфильтрованный столбец, количество скопированных строк будет равно количеству строк в вашем отфильтрованном списке плюс количество пустых строк. Решение состоит в том, чтобы уменьшить копируемый диапазон до минимального количества строк. для захвата всех ваших данных (что также ускорит ваш код).

Поэтому определите переменную LastRow для использования в операции копирования. Пересмотренный код следующим образом:

Sub PullNewstsfromMPtoGL()
Dim LastRow As Long

Sheets("Master Placement").Range("$A$1:$AX999999").AutoFilter Field:=6, Criteria1:="N"
LastRow = Range("B" & Rows.Count).End(xlUp).Row
'Assuming row 1 has headings otherwise change 2s to 1s
Sheets("Master Placement").Range("A2:I" & LastRow _
    & ",AA2:AC" & LastRow _
    & ",AN2:AQ" & LastRow).Copy
With Sheets("General Level")
'No need to select paste range
    .Range("B1").End(xlDown).Offset(1, 0).PasteSpecial _
        Paste:=xlPasteValuesAndNumberFormats, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False
    LastRow = .Range("B" & Rows.Count).End(xlUp).Row
    .Range("A2").AutoFill Destination:=.Range("A2:A" & LastRow)
End With
'Optional - clear filter from Master Placement
Sheets("Master Placement").Range("$A$1:$AX999999").AutoFilter Field:=6
End Sub

Я не мог воспроизвести ошибку PasteSpecial method of Range class failed, но я обычно связываю это с тем, что нечего вставлять. Выбор ячеек не очистит буфер обмена, но редактирование чего-либо или очистка фильтра очистит. Вы сказали в своем ОП, что

Я вырезал и вставил фрагменты кода, которые, по моему мнению, мне нужны

поэтому мне интересно, была ли не скопированная строка кода, которая могла бы очистить буфер обмена?

person Mark Fitzgerald    schedule 24.04.2014
comment
ВЫ СПАСАЕТЕ ЖИЗНЬ! Это делает именно то, что мне нужно, и без ошибок. Большое спасибо Марк! - person kcappy; 24.04.2014