У меня есть книга 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