Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
excel vba-选择自动筛选后除标题以外的所有筛选行_Vba_Excel_Filter - Fatal编程技术网

excel vba-选择自动筛选后除标题以外的所有筛选行

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

我正在尝试编写一个宏来执行以下操作:

从表1中,观察A列中输入的数据; 当我在a列的单元格中写入内容时,使用该值过滤Sheet2; 完成筛选后,即使有多个值,也要将第二个工作表中除列标题之外的所有内容复制到第一个工作表中。 我试着写下:

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仍将以相同的方式命名。感谢您的澄清。