2016-12-16 2 views
0

Здравствуйте, я новичок в VBA и stackoverflow.Ошибка времени выполнения '1004' ActiveSheet.Paste в таблицу с ошибкой

моя программа просто выбирает таблицу 1 и копирует ее в конец таблицы2. Код выглядит следующим образом.

Sub c_p() 



    Application.Goto Reference:="Table1" 
    Selection.Copy 
    Application.Goto Reference:="Table2" 
    Selection.End(xlToRight).Select 
    Selection.End(xlDown).Select 
    Selection.ListObject.ListRows.Add AlwaysInsert:=False 
    ActiveSheet.Paste 


End Sub 

Когда я запускаю программу, она дает "Ошибка выполнения '1004'". Ошибка в этой строке:

ActiveSheet.Paste 

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

Благодарим за помощь.

+0

У меня нет доступа к Excel в данный момент и может думать о нескольких вещах, попробуйте изменить .Paste к .PasteSpecial xlPasteValues. Вот отличный справочник/справочник по таблицам ссылок. https://www.thespreadsheetguru.com/blog/2014/6/20/the-vba-guide-to-listobject-excel-tables –

+0

не защищен ли лист? –

+0

Вам не нужно указывать диапазон перед вставкой? Что относительно 'Activesheet.Selection.Paste'? (Кроме того, лучше [избегать использования '.Activate' /' .Select'] (https://stackoverflow.com/questions/10714251/how-to-avoid-using-select-in-excel-vba-macros) – BruceWayne

ответ

1

После того, как вы скопировали данные, ваша проблема связана с «Selection.ListObject.ListRows.Add AlwaysInsert: = False». Кажется, это заставляет систему «забыть» скопированные данные.

Это может быть адекватным решением

Sub c_p() 
    Application.Goto Reference:="Table1" 
    Selection.Copy 
    Application.Goto Reference:="Table2" 
    Selection.ListObject.ListRows.Add AlwaysInsert:=False 
    Application.Goto Reference:="Table2" 
    Selection.End(xlToRight).Select 
    Selection.End(xlDown).Select 
    ActiveSheet.Paste 
End Sub 
1

спасибо много

вы были правы, что система забыла скопированные данные ..

о коде - ваши изменения не помогли с забытой информацией, но с некоторыми поправками он отлично работает.

вот окончательный код:

Sub c_p2() 

    Application.Goto Reference:="Table2" 
    Selection.ListObject.ListRows.Add AlwaysInsert:=False 
    Application.Goto Reference:="Table1" 
    Selection.Copy 
    Application.Goto Reference:="Table2" 
    Selection.End(xlDown).Select 
    Selection.End(xlDown).Select 
    ActiveSheet.Paste 
End Sub 
Смежные вопросы