#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
, для объектов.