2013-02-28 4 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 

С тем, что вы должны использовать другой способ получения нужного диапазона, кроме использования Select или Selection заявления. Что-то вроде этого должно работать лучше

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

+2

@mango Они медленные и ненадежные. Вы гораздо лучше говорите, что хотите только в коде, а не полагаетесь на изменения в позиции курсора. Вы не будете уязвимы для того, чтобы кто-то щелкнул мышью в середине исполнения и все испортил. Это также приводит к тому, что экран меняется, что тоже медленно. – Brad

1

Try ниже код:

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

+0

Вы хотите, чтобы файл с любыми критериями? – 2013-02-28 16:51:15

+0

да, я сожалею об этом: «rngAdData.AdvancedFilter Действие: = xlFilterInPlace, CriteriaRange: = Листы (« ... »). Диапазон (« E7: H8 »), Unique: = False' – mango

Смежные вопросы