excel vba-选择自动筛选后除标题以外的所有筛选行
我正在尝试编写一个宏来执行以下操作: 从表1中,观察A列中输入的数据; 当我在a列的单元格中写入内容时,使用该值过滤Sheet2; 完成筛选后,即使有多个值,也要将第二个工作表中除列标题之外的所有内容复制到第一个工作表中。 我试着写下:excel vba-选择自动筛选后除标题以外的所有筛选行,vba,excel,filter,Vba,Excel,Filter,我正在尝试编写一个宏来执行以下操作: 从表1中,观察A列中输入的数据; 当我在a列的单元格中写入内容时,使用该值过滤Sheet2; 完成筛选后,即使有多个值,也要将第二个工作表中除列标题之外的所有内容复制到第一个工作表中。 我试着写下: Private Sub Worksheet_Change(ByVal Target As Range) Dim KeyCells As Range Set KeyCells = Range("A:A") If Not Applicatio
Private Sub Worksheet_Change(ByVal Target As Range)
Dim KeyCells As Range
Set KeyCells = Range("A:A")
If Not Application.Intersect(KeyCells, Range(Target.Address)) _
Is Nothing Then
copy_filter Target
End If
End Sub
Sub copy_filter(Changed)
Set sh = Worksheets("Sheet2")
sh.Select
sh.Range("$A$1:$L$5943") _
.AutoFilter Field:=3, _
Criteria1:="=" & Changed.Value, _
VisibleDropDown:=False
Set rang = sh.Range("$A$1:$L$5943") _
.SpecialCells(xlCellTypeVisible)
rang.Offset(0, 0).Select
Selection.Copy
Worksheets("Sheet1").Select
Worksheets("Sheet1").Range(Changed.Address).Offset(0, 1).Select
Selection.PasteSpecial Paste:=xlPasteValues
sh.Range("$A$1:$L$5943").AutoFilter
Application.CutCopyMode = False
End Sub
但是,当我复制选择时,标题行也会被复制,但是使用.Offset1,0会剪切标题和额外的一行,并且不会考虑筛选器未返回结果的情况
如何选择除标题外的所有筛选行?使用sh.UsedRange将为您提供一个动态范围。其中,sh.Range$A$1:$L$5943不会收缩和增长以匹配您的数据集。
我们可以像这样修剪标题行:
Set rang = sh.UsedRange.Offset(1, 0)
Set rang = rang.Resize(rang.Rows.Count - 1)
On Error Resume Next
Set rang = rang.SpecialCells(xlCellTypeVisible)
If Err.Number = 0 Then
End If
On Error GoTo 0
但是SpecialCellsxlCellTypeVisible将抛出一个未找到单元格的提示。如果没有要返回的数据,则出错。因此,我们必须像这样捕获错误:
Set rang = sh.UsedRange.Offset(1, 0)
Set rang = rang.Resize(rang.Rows.Count - 1)
On Error Resume Next
Set rang = rang.SpecialCells(xlCellTypeVisible)
If Err.Number = 0 Then
End If
On Error GoTo 0
使用sh.UsedRange将为您提供动态范围。其中,sh.Range$A$1:$L$5943不会收缩和增长以匹配您的数据集。
我们可以像这样修剪标题行:
Set rang = sh.UsedRange.Offset(1, 0)
Set rang = rang.Resize(rang.Rows.Count - 1)
On Error Resume Next
Set rang = rang.SpecialCells(xlCellTypeVisible)
If Err.Number = 0 Then
End If
On Error GoTo 0
但是SpecialCellsxlCellTypeVisible将抛出一个未找到单元格的提示。如果没有要返回的数据,则出错。因此,我们必须像这样捕获错误:
Set rang = sh.UsedRange.Offset(1, 0)
Set rang = rang.Resize(rang.Rows.Count - 1)
On Error Resume Next
Set rang = rang.SpecialCells(xlCellTypeVisible)
If Err.Number = 0 Then
End If
On Error GoTo 0
您的代码如何满足OP的这一要求•当我在a列的单元格中写入内容时,使用该值筛选Sheet2;我不太明白,如果没有工作表更改事件,这是可能的。我没有包括OP的工作表更改事件,因为不需要重构。copy_filterChanged仍将以相同的方式调用。感谢您的澄清。您的代码如何满足OP的这一要求•当我在a列的单元格中写入内容时,使用该值筛选Sheet2;我不太明白,如果没有工作表更改事件,这是可能的。我没有包括OP的工作表更改事件,因为不需要重构。copy_filterChanged仍将以相同的方式命名。感谢您的澄清。