Вы на правильном пути, используя логическое значение is_open
для отслеживания состояния поля со списком, но что вы действительно хотите отследить, так это состояние "Должен ли я повторно заполнить поле со списком данными базы данных?"
Когда вы хотите заполнить список?В настоящее время вы хотите, чтобы окно списка заполнялось каждый раз, когда пользователь щелкает раскрывающийся список (не принимая во внимание вашу переменную состояния is_open
).Это действительно то, что вы хотите?
Я бы предположил, что вам действительно нужно, чтобы поле со списком обновлялось только после того, как что-то изменилось .Возможно, вы хотите, чтобы раскрывающийся список обновлялся только при первом открытии формы.Возможно, вы хотите, чтобы данные изменялись только при изменении текста в окне поиска.Если это так, вам нужно основывать свою логику на состоянии, когда вы действительно хотите выполнить обновление.
Например, допустим, вы хотите обновить поле со списком, только если текст в поискекоробка меняется.Сейчас я не смотрю на Excel, но давайте представим, что у вас есть текстовое поле с именем txtSearch
со свойством Text
.Я бы начал с добавления модуля или переменной уровня класса, чтобы поддерживать состояние предыдущей текстовой записи:
Private mPreviousSearchText As String
Затем я бы обновил свой код события следующим образом:
Private Sub cboVariety_DropButtonClick()
Dim rs As New Recordset
Dim search_text As String
search_text = txtSearch.Text
If mPreviousSearchText = search_text Then
'The current search matches the previous search,'
'so we do not need to perform the update.'
Exit Sub
End If
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
'Set the previousSearchText var to be the search_text so that it does'
'not run unless the value of my text box changes.'
mPreviousSearchText = search_text
End Sub
Весь смысл в том, чтобы установить , когда вы действительно хотите выполнить обновление , и найти способ связать ваше логическое решение с состоянием, связанным с тем, когда вы хотите выполнить действие, которое только случайно связано спользователь нажимает на выпадающий список.