выпадающий список, как исключить пробелы из списка, полученного с помощью listobject - PullRequest
2 голосов
/ 28 февраля 2020

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

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

  2. Я преобразую значение databodyrange из столбца 13 в список комбинированного списка, однако даже при правильной фильтрации его также добавляет строки, которые я отфильтровал.

код ..

Private Sub UserFrom_Initialize()
  Dim db As ListObject
  Set db = Worksheets("baseOfData").ListObjects("database")

  db.Range.AutoFilter Field:=1, Criteria1:="<>"
  Me.cmbTasks.List = db.ListColumns(13).DataBodyRange.Value
End Sub

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

любые предложения

Ответы [ 2 ]

4 голосов
/ 28 февраля 2020

однако даже при правильной фильтрации он также добавляет отфильтрованные строки.

Me.cmbTasks.List = db.ListColumns (13) .DataBodyRange.Value

Это потому, что вы делаете это неправильно. Вы имеете в виду полный столбец, а не отфильтрованный диапазон. Попробуйте это

Dim db As ListObject
Set db = Worksheets("baseOfData").ListObjects("database")

db.Range.AutoFilter Field:=1, Criteria1:="<>"
Me.cmbTasks.List = db.DataBodyRange.Columns(13).SpecialCells(xlCellTypeVisible).Value

Следующая проблема, с которой вы можете столкнуться, заключается в том, что она будет показывать значения с первого Area, только если имеется несколько областей.

enter image description here

Чтобы справиться с этим, попробуйте

Dim db As ListObject
Dim aCell As Range, rngArea As Range

Set db = Worksheets("baseOfData").ListObjects("database")

db.Range.AutoFilter Field:=1, Criteria1:="<>"

'~~> Loop through each area
For Each rngArea In db.DataBodyRange.Columns(13).SpecialCells(xlCellTypeVisible).Areas
    '~~> Loop though each cell in the area
    For Each aCell In rngArea
        cmbTasks.AddItem aCell.Value
    Next aCell
Next rngArea

enter image description here

0 голосов
/ 28 февраля 2020

Почему бы не немного проще (если итерация возможна):

Dim db As ListObject, cel As Range

Set db = Worksheets("baseOfData").ListObjects("database")
For Each cel In db.DataBodyRange.Columns(13).Cells
    If cel.EntireRow.Hidden <> True Then
        cmbTasks.AddItem cel.value
    End If
Next

Хотели бы вы внести некоторые изменения в таблицу в соответствии с выбранным комбинированным значением? Если да, реальный номер строки, связанный с каждым комбинированным значением, должен быть запомнен. Например, в скрытом столбце комбо (используя cel.Row).

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