2015-09-25 4 views
0

Я пробовал ряд методов для фильтрации столбца для уникальных значений (включая пробелы и пробелы с пространством внутри). Я хочу отфильтровать эти значения, а затем вставить их в столбец a на другом листе.VBA Расширенный фильтр уникальные значения и копия на другой лист

Sub filter_2() 
    With Sheets("ICM flags") 

     .Columns("a").AdvancedFilter Action:=xlFilterCopy, copytorange:=Sheets("Flag Update (2)").Range("a2"), Unique:=True 

    End With 
End Sub 

Описанный выше метод работает для .range("a2"), но если я пытаюсь использовать .range("a1") я получаю ошибку во время выполнения 1004 Метод расширенного фильтра класса не удалось.

Я получил ошибку времени выполнения 1004 расширенный метод фильтра класса не удалось с помощью метода ниже.

Sub unique_filter() 

       Sheets("ICM flags").Columns("a").AdvancedFilter _ 
        Action:=xlFilterCopy, _ 
         copytorange:=Sheets("Flag Update (2)").Range("a1"), Unique:=True 

End Sub 

Для обоих вышеуказанных методов и с правок в Davesexcel ответ:

Sub AdvFilter() 
Dim ws As Worksheet, sh As Worksheet 
Dim rng As Range, Frng As Range 

Set sh = Sheets("ICM Flags") 
Set Frng = sh.Range("A:A") 
Set ws = Sheets("Flag Update (2)") 
Set rng = ws.Range("A1") 

'Frng.AdvancedFilter Action:=xlFilterCopy, copytorange:=rng, Unique:=True 
Frng.AdvancedFilter Action:=xlFilterInPlace, Unique:=True 

End Sub 

метод работает для FilterInPlace, но не CopyToRange

+1

Иногда (не всегда), если диапазон вы фильтрация не выбран эта ошибка происходит. Попробуйте выбрать диапазон перед фильтрацией. Выбор * не должен * быть обязательным, но я видел, что это имеет значение. –

+1

Я считаю, что вам нужно использовать переменные, если вы хотите скопировать предварительный фильтр на другой лист. – Davesexcel

ответ

0

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

Sub AdvFilter() 'filters flags copied from ICM to unique values and pastes into Flag update sheet. 

    Dim ws As Worksheet, sh As Worksheet 
    Dim rng As Range, Frng As Range, Prng As Range 

    Set ws = Sheets("Flag Update (2)") 

    Set sh = Sheets("ICM Flags 1")'destination sheet 
    Set Frng = sh.Range("A:A")'filter range 
    Set rng = sh.Range("c1")'filter output range 


    Frng.AdvancedFilter Action:=xlFilterCopy, copytorange:=rng, Unique:=True 
    ws.Columns("a").Value = sh.Columns("c").Value 'Separate copying as the filter didn't like copying to another sheet 

End Sub 
1

Когда я запустил свой код, он работал не ошибки на моем конце.

Это тот же код, но с использованием переменных и может работать лучше для вас.

Sub AdvFilter() 
    Dim ws As Worksheet, sh As Worksheet 
    Dim rng As Range, Frng As Range 

    Set ws = Sheets("Flag Update (2)") 
    Set rng = ws.Range("A1") 
    Set sh = Sheets("ICM flags") 
    Set Frng = sh.Range("A:A") 

    Frng.AdvancedFilter Action:=xlFilterCopy, copytorange:=rng, Unique:=True 

End Sub 
+0

Похоже, это будет хорошо работать, должно было подумать об этом на самом деле! Я проверю его позже сегодня и приму ваш ответ, если у меня нет проблем. Cheers –

+0

Странно, когда я тестирую это, я получаю 1004 «пропущенное или незаконное имя поля». Я запустил его с открытым окном местных жителей и, похоже, не вижу никаких проблем - никаких идей? Cheers –

+0

Давайте посмотрим ваш код, я попытаюсь воспроизвести проблему. Вы можете добавить его в свой оригинальный пост. – Davesexcel