在VBA中操作过滤器

时间:2012-12-10 14:31:13

标签: excel vba

我最近开始用VBA写作多年来用其他各种语言写的。我目前在使用Excel VBA中的过滤器时遇到了一些奇怪的问题,并想知道是否有人可以了解我遇到的行为。

我想通过多个不同的列过滤数据集,一次一个,我这样做是通过将我的数据集复制到新工作表并在那里对数据进行排序。对于我使用的第一个过滤器:

Sheets("Temp Data").Range("A:T").ClearContents
Sheets("Main Sheet").Range("A1", "T" & CountLV_Rows).Copy Sheets("Temp Data").Range("A1", "T" & CountLV_Rows)
Sheets("Temp Data").Range("A1", "T" & CountLV_Rows).Sort Key1:=Range("R1"), Order1:=xlAscending, Header:=xlGuess, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal

这很有效。我现在想要按照Col C INSTEAD中的值进行过滤,我重复上面的代码(包括clearcontents命令,因为我认为这会提高我成功的机会......并且只需交换Key1价值为C1

对于第二个(希望是新的过滤器),我使用了:

 `Sheets("Temp Data").Range("A:T").ClearContents
Sheets("Main Sheet").Range("A1", "T" & CountLV_Rows).Copy Sheets("Temp Data").Range("A1", "T" & CountLV_Rows)

'Sort the data so ascending site numbers in column C
Sheets("Temp Data").Range("A1", "T" & CountLV_Rows).Sort Key1:=Range("C1"), Order1:=xlAscending, Header:=xlGuess, _
    OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
    DataOption1:=xlSortNormal`

但是,我的数据在首先按列R ...

排序后按列C排序

如何擦除以前应用的所有排序?

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

我认为这可能与您未对工作表和范围进行限定这一事实有关,即明确指定它们所在的工作簿或工作表。这是您一直想做的事情。

我已经在下面完成了它,它在Excel 2010中适用于我:

Sub test()
Dim CountLV_Rows As Long
Dim wbActive As Excel.Workbook

Set wbActive = ActiveWorkbook
With wbActive
    .Sheets("Temp Data").Range("A:T").ClearContents
    CountLV_Rows = .Sheets("Main Sheet").Range("A" & Rows.Count).End(xlUp).Row
    .Sheets("Main Sheet").Range("A1", "T" & CountLV_Rows).Copy _
            Destination:=.Sheets("Temp Data").Range("A1", "T" & CountLV_Rows)
    With .Sheets("Temp Data")
        .Range("A1", "T" & CountLV_Rows).Sort Key1:=.Range("R1"), Order1:=xlAscending, Header:=xlGuess, _
                                              OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
                                              DataOption1:=xlSortNormal
    .Activate
    MsgBox "Sorted by R"
        .Range("A1", "T" & CountLV_Rows).Sort Key1:=.Range("C1"), Order1:=xlAscending, Header:=xlGuess, _
                                              OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
                                              DataOption1:=xlSortNormal
    End With
End With
End Sub