2016-06-16 22 views
0

Я пытаюсь скопировать специальные значения и форматирование из нескольких книг в главную электронную таблицу. Количество столбцов одинаково в источнике и получателе, а количество строк варьируется.Специальная копия VBA не работает

Я прочитал другие темы на этом и попробовал несколько способов (включая определение диапазона в целевом файле), но я все еще не могу сделать специальную работу вставкой. Ниже приведен мой код:

Sub mergefiles() 

Dim folderpath As String 
Dim filepath As String 
Dim filename As String 
Dim erow As Long 


folderpath = "D:\Test\" 
filepath = folderpath & "*.xls*" 
filename = Dir(filepath) 

Dim lastrow As Long, lastcolumn As Long 

Do While filename <> "" 

    Workbooks.Open (folderpath & filename) 

    Worksheets("EmplOffers").ShowAllData 

    lastrow = ActiveSheet.Cells(Rows.Count, 3).End(xlUp).Row 
    lastcolumn = ActiveSheet.Cells(6, Columns.Count).End(xlToLeft).Column 

    Range(Cells(6, 3), Cells(lastrow, lastcolumn)).Copy 

    Application.DisplayAlerts = False 

    ActiveWorkbook.Close 

    erow = Worksheets("EmplOffers").Cells(Rows.Count, 3).End(xlUp).Offset(1,  0).Row 

    Worksheets("EmplOffers").Range(Cells(erow, 3), Cells(erow, 20)).PasteSpecial=:xlPasteValuesAndNumberFormats 

    filename = Dir 

Loop 

Application.DisplayAlerts = True 

End Sub 

Большое спасибо!

+1

Что именно я Не работает? Это дает вам ошибку или действует неожиданно? – RGA

+0

Он просто ничего не копирует. Просто похоже, что он выбирает диапазон, но не выполняет фактическую копию. – Ioana

ответ

0

Попробуйте изменить пасте вызов:

Worksheets("EmplOffers").Range(Cells(erow, 3).Address).PasteSpecial Operation:=xlPasteValuesAndNumberFormats 
+0

Большое спасибо! Прекрасно работает! – Ioana

+0

@ Ioana, если вы не возражаете, отметьте мой ответ как правильный, чтобы удалить это из очереди без ответа – RGA

+0

Готово! Спасибо что подметил это. – Ioana

0

Именованная параметр должен предшествовать: =
Изменение

Worksheets("EmplOffers").Range(Cells(erow, 3), Cells(erow, 20)).PasteSpecial=:xlPasteValuesAndNumberFormats 

To:

Worksheets("EmplOffers").Range(Cells(erow, 3), Cells(erow, 20)).PasteSpecial Paste:=xlPasteValuesAndNumberFormats 
+0

Большое спасибо. Работает также! – Ioana

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