我使用此代码过滤数据库,然后将生成的过滤数据复制到第二个工作簿中的工作表。
With ws_sched
Set srng = .Range(.Cells(1, 1), .Cells(.Range("A" & Rows.count).End(xlUp).row, .Cells(1, Columns.count).End(xlToLeft).Column))
srng.AutoFilter _
Field:=2, _
Criteria1:=trgt_date, _
VisibleDropDown:=False
'srng.SpecialCells(xlCellTypeVisible).Copy ws_data.Range("A1")
srng.Copy
ws_data.Range("A1").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
If .AutoFilterMode Then .AutoFilterMode = False
End With
'ws_sched'是过滤的原始数据库。 'ws_data'是第二个工作簿中的目标工作表。
过滤器有效,但复制和粘贴仅留下源数据库的标题行(多行过滤数据的第一行)。
是否有人能够帮我解决为什么我的过滤数据没有被转移的问题?
以上代码反映了我根据对Thiago建议的理解,对原始代码所做的更改。这仍然只复制标题行,没有过滤数据。
答案 0 :(得分:0)
尝试粘贴复制的数据,而不是像现在一样通知目的地
答案 1 :(得分:0)
您必须只有ws_sched
列A中的标题,即为srng
提供行深度的标题,因此设置为1行range
您可以在Msgbox srng.Address
Set srng =...
语句来证明这一点
所以你有两种方式:
选择其他列以从
获取数据行 depth在这种情况下,我会选择专栏" B"因为这是你似乎想要过滤的那个
Set srng = .Range(.Cells(1, 1), .Cells(.Range("B" & Rows.Count).End(xlUp).row, .Cells(1, Columns.Count).End(xlToLeft).Column))
通过UsedRange
推断数据行 depth在这种情况下,您只需要更改复制语句,如下所示:
Intersect(.UsedRange, .Columns(2).EntireRow, srng.EntireColumn).SpecialCells(xlCellTypeVisible).Copy ws_data.Range("A1")
最后,您可能会遇到A列完全空白的情况,即甚至没有标题。在这种情况下,您应该将所有代码转移到B列
Set srng = .Range(.Cells(1, 2), .Cells(.Range("B" & Rows.Count).End(xlUp).row, .Cells(1, Columns.Count).End(xlToLeft).Column))
srng.AutoFilter _
Field:=1, _
Criteria1:=">=2", _
VisibleDropDown:=False
srng.SpecialCells(xlCellTypeVisible).Copy ws_data.Range("A1")
答案 2 :(得分:0)
此VBA代码将帮助您将过滤后的数据导入其他工作表。
Sub copy_filtered_data()
工作表("数据输入")。UsedRange.SpecialCells(xlCellTypeVisible).Copy _ Destination:=工作表("结果")。范围(" A1" )
End Sub
注意:你也可以使用Autofilter代码。