Как отфильтровать таблицу после копирования и вставки из других таблиц в книгу? - PullRequest
0 голосов
/ 06 января 2020

У меня есть книга Excel с 4 вкладками. С помощью приведенного ниже кода я могу копировать и вставлять 3 вкладки в первую вкладку, однако я не могу понять, как отфильтровать то, что копируется, или отфильтровать главную вкладку в конце вставки.

Код:

Private Sub CommandButton1_Click() ' Assign worksheets 
Dim sheet1 As Worksheet 
Dim sheet2 As Worksheet 
Dim sheet3 As Worksheet 
Dim sheet4 As Worksheet 


With ThisWorkbook
Set sheet1 = .Worksheets("All_open_issues")
Set sheet2 = .Worksheets("Dec")
Set sheet3 = .Worksheets("Jan")
Set sheet4 = .Worksheets("Feb")

End With

'Get the table to copy to
Dim targetTable As ListObject
Set targetTable = sheet1.ListObjects("table1")

If Not targetTable.DataBodyRange Is Nothing Then _
targetTable.DataBodyRange.Delete '' clear out table 1 data and rows

Dim srcData As ListObject
Dim targetRange As Range


' Get the Dec Table Copied
Set srcData = sheet2.ListObjects("table2")
Call CopyTableData(targetTable, srcData)

'' Copy Jan table copied
Set srcData = sheet3.ListObjects("table3")
Call CopyTableData(targetTable, srcData)

''' Get Feb Table Copied
Set srcData = sheet4.ListObjects("table4")
Call CopyTableData(targetTable, srcData)
End Sub

Sub CopyTableData(targetTable As ListObject, srcData As ListObject)

'' If the target table already has data
If Not targetTable.DataBodyRange Is Nothing Then
'' top left part of the range
'' targetTable.DataBodyRange.End(xlDown).Offset(1, 0)

'' Bottom Right part of the range
'' targetTable.DataBodyRange.End(xlDown).Offset(srcData.DataBodyRange.Rows.Count, 
srcData.DataBodyRange.Columns.Count - 1)
Set targetRange = Range(targetTable.DataBodyRange.End(xlDown).Offset(1, 0), _
targetTable.DataBodyRange.End(xlDown).Offset(srcData.DataBodyRange.Rows.Count, 
srcData.DataBodyRange.Columns.Count - 1))

Else '' If the target table is empty
'' top left part of target
''targetTable.HeaderRowRange.Cells(1,1).offset(1,0)

'' Bottom right part of the target range
'' targetTable.HeaderRowRange.Cells(1, 1).Offset(srcData.DataBodyRange.Rows.Count, 
srcData.DataBodyRange.Columns.Count - 1)
Set targetRange = Range(targetTable.HeaderRowRange.Cells(1, 1).Offset(1, 0), _
                        targetTable.HeaderRowRange.Cells(1, 
    1).Offset(srcData.DataBodyRange.Rows.Count, srcData.DataBodyRange.Columns.Count - 1))
End If
' Copy the data
targetRange.Value = srcData.DataBodyRange.Value
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...