Excel как извлечь из результата поиска в одном столбце всю строку данных

#excel #vba #database #search-box

#excel #vba #База данных #окно поиска

Вопрос:

Если заголовок расплывчатый, прошу прощения, у меня есть одно текстовое поле 1, в котором вы вводите часть того, что ищете, и оно покажет все совпадения, содержащие то, что вы заполнили. Но теперь, когда вы нашли то, что искали, и оно выбрано, я хочу автоматически извлечь все данные из строки выбранного результата в правильное текстовое поле.

У меня есть 10 столбцов, каждый столбец по порядку: идентификатор, серийный номер, сообщение, номер, область, дата, статус, функция, имя, описание. (они не совпадают с изображением, я вроде как перевел его) Я пытаюсь создать базу данных для проблем определенных машин, но я застрял и не имею ни малейшего понятия, как это сделать.

Хуже того: эта функция поиска находится в новой форме, основная форма, которая содержит текстовые поля для всех данных, называется MyUserForm , внешний вид изменится, а форма поиска называется UserForm1, когда данные выбраны, я хочу перенести их в эти текстовые поля в другой форме.

 Private Sub ListBox1_Click()

Me.TextBox1.Value = ListBox1.Value
ListBox1.Visible = False

End Sub

Function search_text(textTosearch As String)
Dim i As Long
Dim x As Boolean
Dim xvalue As String

Me.ListBox1.Clear
Me.ListBox1.Height = 54

For i = 2 To 501
    xvalue = Cells(i, 3).Value
    
    If LCase(xvalue) Like LCase(textTosearch) amp; "*" = True Then
        If x = False Then
            Me.ListBox1.Visible = True
            x = True
        End If
    
        If xvalue <> "" Then
           Me.ListBox1.AddItem xvalue
        End If
        
        If Me.ListBox1.Height < 260 Then
            Me.ListBox1.Height = Me.ListBox1.Height   10
        End If
        
    End If
Next

If Me.ListBox1.ListCount <= 0 Then
    Me.ListBox1.Visible = False
End If

End Function

Private Sub TextBox1_Change()
    search_text Me.TextBox1.Value
End Sub

Private Sub UserForm_Initialize()
Me.ListBox1.Visible = False
End Sub


  

Обновить
Я сделал это, кажется, это работает, если у вас, ребята, все еще есть советы, да, пожалуйста!

 Private Sub CommandButton1_Click()
Unload Me
MyUserForm.show
End Sub

Private Sub ListBox1_Click()

Me.TextBox1.Value = ListBox1.Value
ListBox1.Visible = False

End Sub

Function search_text(textTosearch As String)
Dim i As Long
Dim x As Boolean
Dim xvalue As String

Me.ListBox1.Clear
Me.ListBox1.Height = 54

For i = 2 To 501
    xvalue = Cells(i, 3).Value
    
    If LCase(xvalue) Like LCase(textTosearch) amp; "*" = True Then
        If x = False Then
            Me.ListBox1.Visible = True
            x = True
        End If
    
        If xvalue <> "" Then
           Me.ListBox1.AddItem xvalue
        End If
        
        If Me.ListBox1.Height < 260 Then
            Me.ListBox1.Height = Me.ListBox1.Height   10
        End If
        
    End If
    If Cells(i, 3).Value = TextBox1.Text Then
        MyUserForm.txtDriveNo = Sheet1.Cells(i, 2).Value
        MyUserForm.txtMessage = Sheet1.Cells(i, 3).Value
        MyUserForm.txtNumber = Sheet1.Cells(i, 4).Value
        MyUserForm.cbArea = Sheet1.Cells(i, 5).Value
        MyUserForm.txtDatum = Sheet1.Cells(i, 6).Value
        MyUserForm.cbStatus = Sheet1.Cells(i, 7).Value
        MyUserForm.cbFunctie = Sheet1.Cells(i, 8).Value
        MyUserForm.txtNaam = Sheet1.Cells(i, 9).Value
        MyUserForm.txtBeschrijving = Sheet1.Cells(i, 10).Value
    End If

Next

If Me.ListBox1.ListCount <= 0 Then
    Me.ListBox1.Visible = False
End If

End Function

Private Sub TextBox1_Change()
    search_text Me.TextBox1.Value
End Sub

Private Sub UserForm_Initialize()
Me.ListBox1.Visible = False
End Sub

  

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

1. Пара советов, не связанных с проблемой или ее решением: 1) вы можете использовать With-End With вместо того, чтобы вводить каждый раз MyUserForm . В этом случае это не даст вам большого преимущества, но я все же сообщу вам, если вы не знали. 2) Я настоятельно рекомендую использовать не однобуквенную переменную, например x . Используйте имена переменных длиной не менее 3 букв, которые вы не найдете в остальной части кода. Например xyz , нормально или tr1 ; не используйте Sel или She или Val , потому что вы будете наиболее […]

2. […] скорее всего, вы найдете их в остальной части кода (в word, например Select , или Sheet или Value ). Также рекомендуется добавлять тег к имени, чтобы напомнить вам, что это за переменная. Я использую теги длиной в 3 буквы, например Rng , для диапазонов или Dbl для удвоений. Другие используют однобуквенные теги, например o , для объектов.