2015-04-09 3 views
1

В моей таблице Excel У меня есть таблица данных, созданныхExcel отсоединяется от клиентов на Автофильтра

У меня также есть две кнопки

Один фильтрует четвертый столбец ничего выше 0

With ActiveSheet 
     .Range("A138:H246").Select 
     Selection.AutoFilter Field:=4, Criteria1:=">0", Operator:=xlAnd 
End With 

Другой (должен) удалить фильтр

With ActiveSheet 
    .Range("A138:H246").Select 
    Selection.AutoFilter Field:=4 
End With 

Однако, кнопка для удаления фильтр не работает, я постоянно получаю следующее сообщение

«Вызванный объект был отключен от клиентов Автофильтра»

Я попытался записью макросов, а затем с помощью этого кода, но даже это не помогает, если я бегу код на кнопке

Любые идеи?

+0

Хорошо, даже изменив код на 'Поле: = 4, Критерии1: = "<999", Оператор: = xlAnd ', который терпит неудачу при одном и том же коде ошибки? – AshA

ответ

0

Предлагаю вам использовать инструкцию ниже, когда вы закончили с отфильтрованными данными.

Надеюсь, это поможет?

Activesheet.AutoFilterMode = false 

Как вы говорите, что это может дать ошибки, если автофильтрации уже ложно, когда вы пытаетесь сделать его ложным, однако, если вы поместите эту строку в код в нужном месте фильтр всегда будет верно, если вы хотите установите для него значение false. как показано ниже

ActiveSheet.Range("someRange").AutoFilter Field:=27, Criteria1:="test" 
' do something with filtered data 
ActiveSheet.AutoFilterMode = False 

Это выполняется без ошибок для меня ...

+0

К сожалению, это не сработало, оно выходит из строя и показывает сообщение об ошибке, в котором недостаточно памяти? – AshA

+0

Как объясняют в моем ответе, это может легко генерировать ошибки относительно текущего состояния этого режима в вашем листе. (если он уже находится в состоянии, которое вы пытаетесь установить, excel не нравится ...) – R3uK

0

Mine говорит, что это должно быть так же просто, как это:

ActiveSheet.ShowAllData 

Она просто очистить все фильтры, но это Безразлично» t деактивировать режим AutoFilter, достаточно ли этого?

Вот код для сканирования всех использованных столбцов и сохранения скрытого состояния перед отображением всех из них, чтобы использовать фильтры ShowAllData и удалить ранее скрытые столбцы.

Dim TH() 
ReDim TH(ActiveSheet.Cells(1, Columns.Count).End(xlToLeft).Column) 

For j = LBound(TH) + 1 To UBound(TH) 
    TH(j) = ActiveSheet.Columns(j).EntireColumn.Hidden 
    ActiveSheet.Columns(j).EntireColumn.Hidden = False 
Next j 

ActiveSheet.ShowAllData 

For j = LBound(TH) + 1 To UBound(TH) 
    ActiveSheet.Columns(j).EntireColumn.Hidden = TH(j) 
Next j 

Если вам необходимо изменить режим Автофильтра:

Activesheet.AutoFilterMode = False 
Activesheet.AutoFilterMode = True 

Но это легко может генерировать ошибки относительно текущего состояния этого режима в листе. (если он уже находится в состоянии, которое вы пытаетесь установить, excel не нравится ...)

+0

Если я использую ShowAllData, я получаю сообщение об ошибке «ShowAllData метод класса Worksheet failed» Мне нужно, чтобы другие столбцы листа были скрыты, поэтому я считаю, что эта функция не является жизнеспособным вариантом. – AshA

+0

Итак, я добавил фрагмент кода, который мог бы вам помочь, сообщите мне, достаточно ли этого – R3uK

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