我正在使用高级筛选器将数据从一个工作簿表复制到另一个工作簿表。复制绝对可以正常工作,但是在输入表时,输出表不会调整范围的大小以包含新数据。我试过下面的代码(和其他代码)来获取表来调整范围的大小,但是它什么也没做。也没有给出错误,只是通过代码运行。
这是应该调整表大小的代码的最后一部分:
With tblFiltered
.Resize .Range(myLastRow, tblFiltered.HeaderRowRange.Count)
End With
我包括更多代码,因此您可以看到变量设置为什么。
'Copy Filtered data to specified tables
Dim tblFiltered As ListObject
Dim copyToRng As Range, SDCRange As Range
'DERANGED
'Store Filtered table in variable
Set tblFiltered = wb.Worksheets("Deranged with SOH").ListObjects("Table_Deranged_with_SOH")
'Remove Filtered table Filters
tblFiltered.AutoFilter.ShowAllData
'Set Copy to range on Filtered sheet table
Set copyToRng = tblFiltered.HeaderRowRange
Set SDCRange = MainWB.Worksheets(2).ListObjects("Table_SDCdata").Range
'Use Advanced Filter
SDCRange.AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=DerangedCrit, CopyToRange:=copyToRng, Unique:=False
'Resize filtered table to include new data
With wb.Worksheets("Deranged with SOH").Cells
'find last row of source data cell range
myLastRow = .Find(What:="*", LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
End With
With tblFiltered
.Resize .Range(myLastRow, tblFiltered.HeaderRowRange.Count)
End With
我已经尝试过使用.currentregion
,但也没有任何作用。我将对多个表使用以上代码,每个星期进行复制,调整大小和更改。因此,无法对值进行硬编码以进行大小调整。
myLastRow
变量正确计算出一个值(最后一行的编号),tblFiltered.HeaderRowRange.Count
(在本例中为14)也是如此。
不知道我要去哪里错了,如果有人有任何见识,那会有所帮助,谢谢。
这可能会有所帮助,仅显示如何通过向第二个表中添加行来将行从一个表复制到另一个表。
Sub x()
Dim t1 As ListObject, t2 As ListObject, r As Range, n As Long
Set t1 = ActiveSheet.ListObjects("Table1")
Set t2 = ActiveSheet.ListObjects("Table2")
Set r = t1.ListRows(4).Range.Resize(2) 'range to be copied, 2 rows to table 1
n = t2.Range.Rows.Count 'initial count of rows in table 2
t2.Resize t2.Range.Resize(t2.Range.Rows.Count + r.Rows.Count) 'resize table2 by number of rows in range to be copied
r.Copy t2.Range.Cells(n + 1, 1) 'copy and paste at original end so should fit
End Sub
不确定您为什么要引用仅作为标题的HeaderRowRange
?
如果表受空行/列限制(并且不包含),那么您应该能够执行此操作:
Dim tbl As ListObject
Set tbl = ActiveSheet.ListObjects("myTable")
tbl.Resize tbl.Range(1).CurrentRegion