2015-06-29 3 views
1

Я пытаюсь объединить следующие 2 субтитров в цикл через диапазон, принять значение в активной ячейке 4 и «содержать» автофильтр, значение которого указано в «базе данных листа».Ссылка на листы для циклической активной ячейки

Это справочная проблема, поскольку линия автофильтра - это ошибка.

Вот код:

Option Explicit

Sub Test2() 
Dim searchedvalue As Range 

Sheets("4").Select 
    Range("A2").Select 
    'Set Do loop to stop when an empty cell is reached. 
    Do Until IsEmpty(ActiveCell) 
     Call FILTER1 
     ActiveCell.Offset(1, 0).Select 
    Loop 
End Sub 

Sub FILTER1() 
    Dim searchedvalue As Range 
    Set searchedvalue = Sheets("4").ActiveCell.Selection 
    Sheets("Database").Range("q2").AutoFilter Field:=17, Criteria1:="=*" & searchedvalue.Value & "*", Operator:=xlAnd 
End Sub 

У меня есть этот «Объект не поддерживает это свойство или метод» ошибки на последней строке. Значение ячейки фильтруемая является диапазоном, который последовательно перемещается вниз столбец од листа «4»

+1

Это не последняя строка, а именно: 'Setearchvalue = Таблицы (« 4 »). ActiveCell.Selection' Лист не имеет свойства« ActiveCell »- только« Приложение »- так что вы можете относятся только к активной ячейке активного листа. – Rory

+0

@Rory Как мы можем ссылаться на ячейку, которая ** использовалась для активации ** на произвольном листе? –

+1

@ Gary'sStudent Вам нужно либо сохранить ссылку на нее, когда она активирована, либо активировать лист, получить ссылку на него, а затем продолжить. – Rory

ответ

0

Хорошо сделан для использования Option Explicit но вы столкнулись с проблемами с использованием метода Select и ActiveCell. Вместо этого используйте Range переменные, например:

Sub Test2() 

Dim targetCell As Range 

    Set targetCell = ThisWorkbook.Sheets("4").Range("A2") 
    'Set Do loop to stop when an empty cell is reached. 
    Do Until IsEmpty(targetCell) 
     Call FILTER1(targetCell) 
     Set targetCell = targetCell.Offset(RowOffset:=1) 
    Loop 
End Sub 

Sub FILTER1(ByRef searchedCell As Range) 
     ThisWorkbook.Sheets("Database").Range("q2").AutoFilter Field:=17, Criteria1:="=*" & searchedCell.Value & "*", Operator:=xlAnd 
End Sub 

Предположительно, у вас есть какой-то другой код, который делает что-то в FILTER1 с данными после того, как автофильтрации были применены?

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