2015-08-26 2 views
1

Я пытаюсь запустить этот простой код в VBA, но он продолжает давать мне «диапазон экстракт не определен» ошибка:«диапазон Extract не определен»: расширенный фильтр

Private Sub CommandButton1_Click() 
    'Dim rng As Range 
    Dim RowLast As Long 
    Dim perporig As Workbook 
    count = 0 
    Set perporig = Workbooks.Open("\\Etnfps02\vol1\DATA\Inventory\Daily tracking\perpetual.xlsx", , ReadOnly) 
    With perporig.Sheets("perpetual") 
     .AutoFilterMode = False 
     RowLast = .Cells(Rows.count, "A").End(xlUp).row 
     'Set rng = .Range("C4:C" & RowLast) 
     Range("A3:J" & RowLast).AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range("N1:N6"), Unique:=False 'have also tried Range("A3:J3"), doesn't work. 

    End With 
    ThisWorkbook.Sheets("myperpetual").Range("A5", "J5").PasteSpecial xlPasteValues 
End Sub 

Я пытаюсь скопировать из файл с данными, начиная с A4: J4 до некоторого A16000: J16000. Мне нужно отфильтровать значения в столбце C в диапазоне, указанном на листе в диапазоне N1: N6.
FYI: Заголовок таблицы A4 пуст, а B4: J4 имеют соответствующие заголовки.
Также, пожалуйста, дайте мне знать, если мой метод копирования-вставки неправильный или по какой-то причине не будет работать должным образом.

EDIT: Я также попытался добавить заголовок в столбце A, то есть ячейку A3. Все еще не работает.
Мой диапазон N1: N6 - это список чисел, но я уверен, что ошибка там. Он не указывает, на какой столбец будет включен фильтр.

ответ

0

После того, как вы внутри With perporig.Sheets("perpetual") ... End With блока, предварить все Range objects и Range.Cells property ссылки с периодом (ака . или полной остановки).

With perporig.Sheets("perpetual") 
    .AutoFilterMode = False 
    RowLast = .Cells(Rows.count, "A").End(xlUp).row 
    'Set rng = .Range("C4:C" & RowLast) 
    .Range("A3:J" & RowLast).AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=.Range("N1:N6"), Unique:=False 
End With 

Примечание .Range("C4:C"... и .Range("N1:N6") предваряется периодом. Это указывает на то, что родительский лист диапазона (ов) определяется листом, названным в With ... End With statement. Без этого Excel делает предположение, к какому рабочему листу принадлежит диапазон. обычно это будет ActiveSheet property.

+0

Мой диапазон критериев был бы на другом листе, а не препориге. Ему не нужно "." правильно? Можно ли использовать thisworkbook.sheets(). Range()? –

+1

Я сделал то, что вы упомянули и что я сказал выше, теперь он работает. Благодаря! –

+0

Рад слышать, что вы отсортированы и благодарны за то, что нашли время, чтобы поделиться объединенным решением. – Jeeped

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