VBA - InterSect,过滤行,CTRL + D.

时间:2016-11-02 12:16:44

标签: excel vba excel-vba excel-2010

我正在使用Change event在Excel中处理intersect,如下所示:

Sub Worksheet_Change(ByVal Target As Range)
    Dim WatchRange As Range
    Dim IntersectRange As Range
    Set WatchRange = Range("B2:B65536")
    Set IntersectRange = Intersect(Target, WatchRange)

    If IntersectRange Is Nothing Then
        'Do Nothing
    Else
        For Each b In Target.Rows
            Range("A" & b.Row).Value = "*"
        Next
    End If
End Sub

当我在列B中更改内容时,会将*写入列A。而且效果很好。

当我设置过滤器并使用CTRL+D将某些值复制到过滤的行时,会出现问题。这是我的测试表:

enter image description here

仅在text列中过滤C

enter image description here

使用100将号码CTRL+D复制到所有可见行(列B):

enter image description here

取消过滤器后,所有行都标有*

enter image description here

在小表中不会出现问题,但在表中大约需要1000秒,大约需要10秒。

是否有可能以某种方式跳过hiden文件?

1 个答案:

答案 0 :(得分:1)

使用.EntireRow.Hidden确定特定单元格是否已过滤。您的代码如下:

Sub Worksheet_Change(ByVal Target As Range)
    Dim WatchRange As Range
    Dim IntersectRange As Range
    Set WatchRange = Range("B2:B65536")
    Set IntersectRange = Intersect(Target, WatchRange)

    If IntersectRange Is Nothing Then
        'Do Nothing
    Else
        For Each b In Target
            If b.EntireRow.Hidden = False Then
                Range("A" & b.Row).Value = "*"
            End If
        Next
    End If
End Sub