listbox.Добавить элементы из одного столбца на основе значения поиска из диапазона нескольких столбцов

#vba

#vba

Вопрос:

Я пытаюсь добавить значение только из столбца D, но если значение поиска из столбца D, E или F, функция смещения добавляет элемент из последующего столбца. В listbox необходимо добавить только значение столбца D. Цикл выполнения поиска извлекает значение, но не уверен, как извлекать значения только из определенного столбца. Пожалуйста, помогите:

     If Len(txtSearchItem.Value) > 3 Then
    Dim rFind, rng, rngdb As Range
    Dim i, j As Integer
    Dim strItem As String
    
        With ActiveWorkbook.Sheets("DB").Columns("C:F")
            Set rFind = .Find(What:=Me.txtSearchItem.Value, lookat:=xlPart, MatchCase:=False, SearchFormat:=False)
            Me.lstItem.Clear
            If Not rFind Is Nothing Then
                i = rFind.Row      'rFind.Column amp; ", Row: " amp; rFind.Row
                Me.lblDBDescription = xlshdb.Cells(i, 3).Value
                'Me.txtItem.Value = xlshdb.Cells(i, 4).Value
                
                '*****Show the Item list's in list box ****

                With xlshdb.Range("C:C")
                    Set rng = .Cells(LRow)
                End With
                    Set rngdb = xlshdb.Range("C:F").Find(What:=Me.txtSearchItem.Value, After:=rng, LookIn:=xlValues, lookat:=xlPart, searchorder:=xlByRows, MatchCase:=False)
            
                    If Not rngdb Is Nothing Then
                        FirstAddr = rngdb.Address
                        Do Until rngdb Is Nothing
                            'Debug.Print rngdb.Address
                            Set rngdb = xlshdb.Range("C:F").FindNext(After:=rngdb)
            
                            Me.lstItem.AddItem rngdb.Offset(0, 1)
                            If rngdb.Address = FirstAddr Then
                                Exit Do
                            End If
                        Loop
                            If Me.lstItem.ListCount > 1 Then
                                Me.txtItem.Visible = False
                                Me.lstItem.Visible = True
                                Me.lstItem.Selected(0) = True
                            Else
                                Me.lstItem.Visible = False
                                Me.txtItem.Visible = True
                                Me.txtItem.Value = xlshdb.Cells(i, 4).Value
                            End If
                    Else
                        Me.lstItem.Clear
                        Me.lstItem.Visible = False
                        Me.txtItem.Visible = True
                        Me.txtItem.Value = xlshdb.Cells(i, 4).Value
                    End If
            Else
                Me.lstItem.Clear
                Me.lstItem.Visible = False
                Me.txtItem.Visible = True
                Me.lblDBDescription = ""
                Me.txtItem = ""

            End If

        End With
     End if
  

Комментарии:

1. Итак, вы просматриваете строки в D: F и хотите добавить столбец элемента D в строку найденных ячеек? Я бы сделал Me.lstItem.AddItem .cells(rngdb.row, 4) . Это то, что вам нужно? Это похоже на использование lastrow или lastcolumn, но вместо этого со строкой найденной ячейки.

2. @Simon Большое вам спасибо! Это работает как шарм. Благослови Бог!

Ответ №1:

Просто сделает ответ таким, чтобы он был.

Просто измените строку:

 Me.lstItem.AddItem rngdb.Offset(0, 1)
  

Для:

 Me.lstItem.AddItem .cells(rngdb.row, 4)
  

Мы берем значение строки найденной ячейки и используем его в качестве нашей строки в .Cells диапазоне.