У меня есть форма в Excel с элементом управления со списком. Я хочу, чтобы значения были заполнены из таблицы базы данных, когда поле со списком открывается с использованием того, что уже было введено в качестве критериев LIKE. Это код, который я до сих пор делал для события DropButtonClick для достижения этого.Проблема со списком Excel
Private Sub cboVariety_DropButtonClick()
Static search_text As String
Static is_open As Boolean
Dim rs As New Recordset
If is_open Then
is_open = False
Exit Sub
End If
is_open = True
If search_text = cboVariety Then Exit Sub
search_text = cboVariety
cboVariety.Clear
cboVariety.AddItem search_text
If Len(search_text) > 2 Then
rs.Open _
"SELECT Name FROM tbl_Varieties " & _
"WHERE Name LIKE '%" & search_text & "%' " & _
"ORDER BY Name", connect_string, adOpenStatic
Do Until rs.EOF
If rs!Name <> search_text Then cboVariety.AddItem rs!Name
rs.MoveNext
Loop
rs.Close
End If
End Sub
Проблема заключается в том, что пожары событие DropButtonClick и когда поле со списком открывается, и когда она закрыта. Если этот вспомогательный элемент выполняется, когда поле со списком закрывается, код, который очищает поле со списком, вызывает удаление пользователя.
Я пытаюсь сказать, когда ящик закрыт, используя переменную is_open, которая чередуется между истиной и ложью каждый раз, когда выполняется событие sub. Это кажется хрупким решением проблемы. Есть ли способ лучше?
Единственная проблема, с которой вы могли столкнуться, заключается в том, что значение, выбранное пользователем, не возвращается из запроса, но этого никогда не должно произойти, правильно? –
На самом деле это должно произойти, если они ищут что-то, чего там нет, но законно назначать значение в поле со списком, которое не существует в выпадающем списке. – Tmdean