Страницы: 1
RSS
vba listbox результаты поиска, В listbox, в результатах поиска отобразить строку с 3 значениями
 

Добрый день!

В VBA я новичок, на работе усовершенствую свою базу данных при помощи VBA форм.

Нашел в Интернете форму и переделал её под себя, дальше подскажите, пожалуйста, как на форме с listbox , в результатах поиска отобразить три столбца где будут видны Номер рег, ФИО, IDNP.

Очень надо для упрощения работы.

Помогите.

файл во вложении
 
Код
ListBox1.AddItem Cells(i, 1)
ListBox1.List(j, 1) = Cells(i, 2)
ListBox1.List(j, 2) = Cells(i, 3)
 
В ваших макросах:
1. Что такое ?
Код
...
Cells(ListBox1.List(0, 0), 2).Select
...
ListBox1.List(0, 0) => это не номер строки, должно быть => ListBox1.ListIndex + 1

2. Что такое ?
Код
Private Sub ListBox1_Click()
    If ListBox1.ListIndex = -1 Then Exit Sub ' => A.
    Cells(ListBox1.Value, 2).Select          ' => B.
End Sub
A. Если вы выбираете какой-то запись в списке, как он может иметь индекс -1 ?
Может вы имели в виду " If ListBox1.ListCount = 0 Then Exit Sub " ?

B. ListBox1.Value => зависит от ListBox1.BoundColumn => это не номер строки
ListBox1.Text => зависит от ListBox1.TextColumn

Смотрите в контекстной помощи.

3. У вас вообще нет процедуры инициализации "UserForm", почему?
 
Огромное спасибо, разобрался.
 
ocet p, Вроде как это
Код
 ListBox1.ListIndex = -1
и это
Код
ListBox1.ListCount = 0
в итоге одно и тоже ListBox пустой.
"Все гениальное просто, а все простое гениально!!!"
 
Цитата
cikkoni написал:
на форме с listbox , в результатах поиска отобразить три столбца где будут видны Номер рег, ФИО, IDNP

Цитата
V написал:
ListBox1.AddItem Cells(i, 1)
Другой способ:
Код
Option Explicit

Private indks&, tbl()

Private Sub UserForm_Initialize()
    Dim strk&, i&
    With Sheets("List1")
        strk = .Cells(.Rows.Count, "B").End(xlUp).Row
        tbl = .Range("A2:C" & strk).Value
    End With
    indks = strk - 1
    For i = 1 To indks
        tbl(i, 1) = Application.Trim(tbl(i, 1))
        tbl(i, 2) = UCase(tbl(i, 2))
        tbl(i, 3) = Format(tbl(i, 3), "0000000000000")
    Next
    With UserForm1
        With .ListBox1
            .ColumnCount = -1
            .ColumnWidths = "4cm;12cm;4cm"
            .TextColumn = 1 'Dlya znacheniya v "ListBox1.Text" => "Nomer_per"
            .BoundColumn = 2 'Dlya znacheniya v "ListBox1.Value" => "Familiya Imya Otchestvo"
            .List() = tbl
            .ListIndex = -1
        End With
    End With
End Sub

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    Erase tbl
End Sub

Private Sub TextBox1_Change()
    With UserForm1
        If Trim(.TextBox1.Value) = "" Then
            With .ListBox1
                .Clear
                .List() = tbl
            End With
            Exit Sub
        End If
        Dim i&, j&, tmptbl()
        For i = 1 To indks
            If tbl(i, 2) Like "*" & UCase(.TextBox1.Value) & "*" Then
                j = j + 1
                ReDim Preserve tmptbl(1 To 3, 1 To j)
                tmptbl(1, j) = tbl(i, 1)
                tmptbl(2, j) = tbl(i, 2)
                tmptbl(3, j) = tbl(i, 3)
            End If
        Next
        With .ListBox1
            .Clear
            If j > 0 Then
                .Column() = tmptbl
                Erase tmptbl
            End If
        End With
    End With
End Sub

Private Sub ListBox1_Click()
    Dim strk&, gde_eto As Range
    With Sheets("List1")
        strk = .Cells(.Rows.Count, "B").End(xlUp).Row
        With .Range("B1:B" & strk)
            Set gde_eto = .Find(UserForm1.ListBox1.Value, , xlValues, xlWhole, xlByRows)
        End With
        .Range("B" & gde_eto.Row).Select
        Set gde_eto = Nothing
    End With
End Sub

Цитата
cikkoni написал:
разобрался
Хорошо, только вам надо помнить, что на отфильтрованным списке "Cells(ListBox1.ListIndex + 1, 2).Select" может маркировать не те ячейки которые вы хочете.

Цитата
Nordheim написал:
в итоге одно и тоже ListBox пустой
:)  ... вы поймали меня на ... mental shortcut ... как это на русском будет ... умственный ярлык ... ?
Как бы не смотреть, сначала есть -1 потом есть маркировка/обозначение, потом есть Click.
Страницы: 1
Наверх