2013-04-16 3 views
4

Я пытаюсь скопировать только видимые строки в таблице в отдельный рабочий лист в той же книге. Я немного новичок в использовании подхода «ListObject» для работы со столами (по нескольким причинам ссылка на таблицу напрямую - лучший подход к остальной части моего модуля)Excel VBA - копирование и вставка только видимых строк таблицы

Ниже приведена моя лучшая попытка , когда я запускаю его, я получаю ошибку «run-time error» 438 '' на линии 'Sheets("Sheet8").Range("A1").Paste', я прочесываю интернет в течение часа, пытаясь понять, что я делаю неправильно, фразу так, чтобы он вставлял скопированные данные в другой лист/таблицу? Любая помощь будет оценена!

Спасибо,

Адам

Private Sub CopyVisibleAreaOfTable(ByVal TableName As String) 

Const FN_NAME As String = "CopyVisibleAreaOfTable" 
On Error GoTo catch 

    Dim TargetTable As ListObject 
    Dim NumberOfAreas As Long 

    Set TargetTable = Sheets("Adj1").ListObjects(TableName) 

    ' Check that there are fewer than 8192 seperate areas 
    With TargetTable.ListColumns(1).Range 
     NumberOfAreas = .SpecialCells(xlCellTypeVisible).Areas(1).Cells.Count 
     Debug.Print NumberOfAreas 
    End With 

    If NumberOfAreas = 0 Then 
     'Do something to trigger an error message 
    Else 

     TargetTable.Range.SpecialCells(xlCellTypeVisible).Copy 
     Sheets("Sheet8").Range("A1").Paste 
     Application.CutCopyMode = False 

    End If 

finally: 
    Exit Sub 

catch: 
    Call ErrorReport(FN_NAME, True, Err.Number, Err.Description, "Table Name: " & TableName) 
    Resume finally 

End Sub 
+2

Используйте '.PasteSpecial xlPasteAll' вместо' .Paste' –

+0

Это работал ну, большое спасибо! – AdamDynamic

ответ

7

Укажите назначение в качестве части .Copy метода:

TargetTable.Range.SpecialCells(xlCellTypeVisible).Copy _ 
    Destination:=Sheets("Sheet8").Range("A1") 
+0

Это сработало отлично, огромное спасибо! Как замечание, есть ли простой способ, чтобы он вставлял только данные в исходную таблицу, исключая заголовки? – AdamDynamic

+1

Игнорируйте это, чтобы изменить код, чтобы использовать «DataBodyRange», а не просто «Range» в строке, которая копирует данные. В очередной раз благодарим за помощь! Adam – AdamDynamic

+0

+ 1 Хорошая работа :) –

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