2015-04-15 3 views
1

У меня есть пользовательская форма с несколькими списками со списком. Пользователь может ввести новый элемент или выбрать один из списка.OnKey «Удалить» clear combobox

Он может начать печатать первые буквы требуемого предмета, но когда он совершает ошибку и начинает с, например, «b» вместо «n» он должен очистить combobox вручную или найти элемент в списке с помощью мыши или стрелок.

Я хотел бы быстро снять ящик с помощью клавиши удаления, чтобы пользователь мог начать печатать снова. Но я не знаю, куда поместить эту строку кода, если она правильная (введите событие, измените событие, другое, может быть?).

Application.OnKey "{Delete}", "WyczyscPole" 

Первый Excel должен знать, в каком поле находится пользователь, а затем очистить его.

Я попытался создать отдельный модуль с переменной, которая узнает текущее имя combobox и очистит его в следующем шаге. Но я не знаю, правильно ли называется sub ниже.

Sub WyczyscPole() 

Dim NazwaPola As ComboBox 

NazwaPola = frmZakupy.ActiveControl.Name 
NazwaPola.Clear 

End Sub 

ответ

0

Вы можете использовать событие KeyDown для захвата клавиши Delete (KeyCode = 46), когда пользователь находится в выпадающем списке.

Private Sub NazwaPola_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) 

    If KeyCode = 46 Then 
     Me.NazwaPola.Value = vbNullString 
    End If 

End Sub 
+0

Спасибо, работает как шарм. Не могли бы вы рассказать мне, почему вы использовали событие KeyDown? Разве это не KeyPress? Будет ли это иметь значение? – kkris77

+0

Я не знаю почему, но KeyPress не захватывает такие ключи, как Delete и Backspace, поэтому вам нужно использовать KeyDown (или KeyUp). –

0

Пожалуйста, попробуйте: frmZakupy.value=''

Это хорошая практика, чтобы не использовать специальные символы, такие как «S», «C» в любых имен.

+0

Я отредактировал это имя. – kkris77

Смежные вопросы