#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
диапазоне.