2013-02-28 125 views
1

有人可以提示我可能在這裏做錯了嗎?目前,我正在有效地嘗試使用Ctrl-A命令對vba中的數據塊執行全選操作。然後我希望將該選擇保存爲一個範圍,以便稍後使用它。設置選擇範圍

Dim rngAdData As Range 
..... 
Range("A1").Select 
Range(Selection, Selection.End(xlToRight)).Select 
Range(Selection, Selection.End(xlDown)).Select 

Set rngAdData = Selection 
Range(rngAdData).AdvancedFilter Action:=xlFilterInPla.... //<---- 

最後一行給了我一個run-time error '1004': Method 'Range' of object 'Global' failed

當我做下面的方式,它的工作原理

Range("A1").Select 
Range(Selection, Selection.End(xlToRight)).Select 
Range(Selection, Selection.End(xlDown)).AdvancedFilter Action:=xlFilterInPla.... 

但是做這種方式很麻煩,因爲我需要再次使用範圍這裏

With ActiveWorkbook.Worksheets("....").Sort 
    .SetRange Range(Selection) //<--- 

被指出的那一行給了我同樣的錯誤。

回答

1

Range(rngAdData)被饋送至的範圍內。只需使用rngAdData.AdvancedFilter

這對您的第二個問題是一樣的想法。改用此語法。

With ActiveWorkbook.Worksheets("....").Sort 
    .SetRange Selection 

雖這麼說,你應該使用讓您的所需範圍以外的其他使用SelectSelection語句的另一種手段。像這樣的東西應該更好地工作

Dim rngAdData As Range 
Dim sht As Worksheet, bottomMostRow As Long, rightMostColumn As Long 
Set sht = ActiveSheet 
With sht 
    bottomMostRow = .Cells(1, 1).End(xlDown).Row 
    rightMostColumn = .Cells(1, 1).End(xlToRight).Column 
    Set rngAdData = .Range(.Cells(1, 1), .Cells(bottomMostRow, rightMostColumn)) 
End With 
+0

你爲我敞開了大門,非常感謝。自從我上一個vba項目以來已經有一段時間了。只是一個小問題,是'.Select'語句不好? – mango 2013-02-28 16:55:28

+2

@mango他們很慢,不可靠。你明智地在代碼中明確表達你想要的內容,而不是依賴於光標位置的變化。您的代碼不會受到某人在執行過程中單擊鼠標並將所有內容搞亂的影響。它也會導致屏幕變化太慢。 – Brad 2013-02-28 17:52:45

1

嘗試以下代碼:

Sub sample() 
    Dim rng As Range 
    Range("A1").Select 
    Set rng = Range("A1").CurrentRegion 
    rng.AdvancedFilter xlFilterInPlace, Sheets("sheet1").Range("E7:H8"), False 
End Sub 
+0

非常感謝您的幫助。雖然我收到了編譯錯誤。說的參數不是可選的:'rngAdData.AdvancedFilter' – mango 2013-02-28 16:50:26

+0

你想filer與任何標準? – 2013-02-28 16:51:15

+0

是的,我很抱歉省略:'rngAdData.AdvancedFilter操作:= xlFilterInPlace,CriteriaRange:=表格(「...」)。Range(「E7:H8」),Unique:= False' – mango 2013-02-28 16:52:20