Все возможные комбинации - Ошибка выполнения 6 в VBA Excel - PullRequest
0 голосов
/ 08 апреля 2019

У меня есть этот код, целью которого является получение всех возможных комбинаций в зависимости от фильтров, выбранных пользователем.В столбцах от L до P находятся выбранные фильтры (в зависимости от фильтра они могут идти от 1 до 12), а диапазон от V7 до Z7 - это место, где я хочу отображать комбинации.

На других аналогичныхвопросы с той же ошибкой, основной причиной является тип переменной "long", но я уже использую его, как они предложили.

    Columns("V:Z").Select
    Selection.ClearContents

    Dim c1() As Variant
    Dim c2() As Variant
    Dim c3() As Variant
    Dim c4() As Variant
    Dim c5() As Variant
    Dim out() As Variant
    Dim l As Long, m As Long, n As Long, o As Long, p As Long, q As Long


    Dim col1 As Range
    Dim col2 As Range
    Dim col3 As Range
    Dim col4 As Range
    Dim col5 As Range
    Dim out1 As Range


    Set col1 = Range("L7", Range("L7").End(xlDown))
    Set col2 = Range("M7", Range("M7").End(xlDown))
    Set col3 = Range("N7", Range("N7").End(xlDown))
    Set col4 = Range("O7", Range("O7").End(xlDown))
    Set col5 = Range("P7", Range("P7").End(xlDown))

    c1 = col1
    c2 = col2
    c3 = col3
    c4 = col4
    c5 = col5

    'Here is where I get the error
    Set out1 = Range("V7", Range("Z7").Offset(UBound(c1) * UBound(c2) * UBound(c3) * UBound(c4) * UBound(c5)))
    out = out1

    l = 1
    m = 1
    n = 1
    o = 1
    p = 1
    q = 1

    Do While l <= UBound(c1)
        Do While m <= UBound(c2)
            Do While n <= UBound(c3)
                Do While o <= UBound(c4)
                    Do While p <= UBound(c5)
                        out(q, 1) = c1(l, 1)
                        out(q, 2) = c2(m, 1)
                        out(q, 3) = c3(n, 1)
                        out(q, 4) = c4(o, 1)
                        out(q, 5) = c5(p, 1)
                        q = q + 1
                        p = p + 1
                    Loop
                    p = 1
                    o = o + 1
                Loop
                o = 1
                n = n + 1
            Loop
            n = 1
            m = m + 1
        Loop
        m = 1
        l = l + 1
    Loop

    out1.Value = out

1 Ответ

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

Нашел решение после построчной проверки кода.Оставлю это здесь на случай, если кому-то понадобится это в будущем.В принципе, если бы в качестве фильтра было выбрано только одно значение (столбцы с L по P), то диапазоны

     Set col1 = Range("L6", Range("L6").End(xlDown))
     Set col2 = Range("M6", Range("M6").End(xlDown))
     Set col3 = Range("N6", Range("N6").End(xlDown))
     Set col4 = Range("O6", Range("O6").End(xlDown))
     Set col5 = Range("P6", Range("P6").End(xlDown))

были бы 1048569. Поэтому мне просто нужно было убедиться, что было как минимум 2 значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...