Excel: использование расширенного отличительного фильтра для уже отфильтрованного диапазона [1004: недопустимая база данных или диапазон таблицы.] - PullRequest
0 голосов
/ 08 апреля 2020

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

Но я получаю сообщение об ошибке: 1004 «База данных или диапазон таблиц недопустимы.»

Это код, который я пытаюсь использовать:

Sub Schritt_42temp()

With Sheets("Tabelle1")
    lastRow = .Range("A" & .Rows.Count).End(xlUp).Row
End With

    ActiveSheet.Range("$A$1:$BZ$" & lastRow).AutoFilter Field:=60, Criteria1:=1

    Range("A2:A" & lastRow).SpecialCells(xlCellTypeVisible).Select
    Selection.AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range("BG2:BG6000"), Unique:=True

End Sub 

Это работает, если я не фильтрую список, но важно, чтобы он выбирает только отфильтрованные элементы:

Sub Schritt_42temp()

With Sheets("Tabelle1")
    lastRow = .Range("A" & .Rows.Count).End(xlUp).Row
End With

   'Disable Filtering
   'ActiveSheet.Range("$A$1:$BZ$" & lastRow).AutoFilter Field:=60, Criteria1:=1

    Range("A2:A" & lastRow).SpecialCells(xlCellTypeVisible).Select
    Selection.AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range("BG2:BG6000"), Unique:=True

End Sub 

Обратите внимание, что я абсолютный новичок в программировании на VBA. У вас есть какой-нибудь совет для меня?

1 Ответ

0 голосов
/ 08 апреля 2020

, поскольку ваша цель состоит в том, чтобы иметь список уникальных значений для перебора, вы можете использовать объект Dictionary, чтобы получить его

Sub Schritt_42temp()
    Dim cel As Range
    Dim dict As Object: Set dict = CreateObject("Scripting.Dictionary")

    With Sheets("Tabelle1")

        With .Range("BZ1", Cells(.Rows.Count, 1).End(xlUp))
            .AutoFilter Field:=60, Criteria1:=1
            For Each cel In .Columns(1).Offset(1).Resize(.Rows.Count - 1).SpecialCells(xlCellTypeVisible)
                dict(cel.Value) = dict(cel.Value) & vbNullString
            Next
        End With
        .AutoFilterMode = False

        Dim valuesToIterate As Variant
        valuesToIterate = dict.keys '<-- here you get an array filled with column A unique values corresponding to column BH 1's

    End With
End Sub
...