Есть ли способ связать определенный столбец в электронной таблице со списком в графическом интерфейсе [VBA] - PullRequest
1 голос
/ 09 июля 2019

Я пытаюсь использовать для каждого цикла, чтобы динамически находить, из какого столбца данный заполненный комбинированный блок извлекает данные из таблицы Excel.Может быть выполнено более одного поиска в комбинированном списке (то есть найти строки, в которых cmb_year = 2018 и cmb_period = 6 и cmb_group = health. Конечная цель состоит в том, чтобы найти необработанные данные по одному критерию, а затем найти эти данные (тот, который мы только что отфильтровали) для поиска.следующие критерии и т. д., пока не будут выполнены все условия.

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

If WorksheetExists("FilteredSheet") Then

Worksheets("FilteredSheet").Delete


Else

Dim wrksName As String
wrksName = "FilteredSheet"
Dim ws2 As Worksheet
Set ws2 = Worksheets.Add(Type:=xlWorksheet)
With ws2
    .Name = wrksName
End With

End If

Dim ws As Worksheet
Set ws = Worksheets("Sheet2")


Dim populatedBoxes As New Collection
'finds all combo boxes that are populated
Set populatedBoxes = GetPopulatedThings(Multipage1, "ComboBox")
Dim cb As MSForms.ComboBox
For Each cb In populatedBoxes
'attemps to loop through each combobox to search for values in it's corresponding column in the worksheet
    Call FilterSheet(ws, ws2, cb)
Next

End Sub

Private Function FilterSheet(wrks As Worksheet, pastewrks As Worksheet, cmb As ComboBox) As Worksheet

a = wrks.UsedRange.Rows(wrks.UsedRange.Rows.Count).Row

For i = 1 To a
    'tries to find the column in a given row that matches where the combobox was originally populated from
    If wrks.Cells(i, cmb.BoundColumn).Value = cmb.Value Then
        wrks.Rows(i).Copy
        pastewrks.Activate
        b = pastewrks.Cells(Rows.Count, 1).End(xlUp).Row
        pastewrks.Cells(b + 1, 1).Select
        ActiveSheet.Paste
        Worksheets(wrks).Activate
        'pastes to all matching values to a new worksheet
    End If
Next

Application.CutCopyMode = False


Set FilterSheet = pastewrks

End Function

Я не могу использовать boundcolumn в цикле for, расположенном в FilterSheet, поскольку при изменении свойства boundcolumn на что-то болеечем 1, значение поля со списком становится нулевым (скорее всего из-за того, что это поле со списком из одного столбца)

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