Настройка некоторых свойств для выпадающего списка (прокрутка, редактирование, переход) - PullRequest
0 голосов
/ 16 октября 2011

Есть 3 свойства, которые я хочу установить для некоторых комбинированных списков форм VBA, и я не знаю, возможно ли это. Я не хочу, чтобы комбинированный список редактировался. Прямо сейчас, если пользователь наберет что-то, что он отправит форму, он отправит это значение ... Я хочу позволить ему выбирать только из значений, которые я добавил в Combobox. Я хочу сделать список элементов в комбинированном списке прокручиваемым. Прямо сейчас я могу прокручивать список, если использую полосу прокрутки, но я не знаю, почему я не могу прокрутить с помощью мыши. И я хочу перейти к некоторому пункту, если я начну печатать Допустим, у меня есть месяцы года в одном выпадающем списке ... если я начну печатать mar, я хочу, чтобы он прыгнул в марш. Я знаю, что для форм HTML это свойства по умолчанию, но я не знаю, о формах VBA ... Большое спасибо

Ответы [ 2 ]

2 голосов
/ 17 октября 2011

Из поведения, которое вы хотите, некоторые возможны с настройками в Combo, другие вам нужно будет кодировать

  1. Список месяцев: поместите список записей на (скрытый) лист и имядиапазон.Установите .RowSource в этот диапазон
  2. Соответствует по мере ввода: Установите свойства .MatchEntry = fmMatchEntryComplete и .MatchRequired = True
  3. Отклонить записи не в списке: Комбо с этими настройками позволит вам ввести недействительныйзапись, но отклонит ее с всплывающим сообщением об ошибке при фиксации.Если вы хотите без вывода сообщений отклонить недействительные данные при вводе, вам нужно будет их кодировать.
  4. Если вы хотите, чтобы выбранное значение было возвращено на лист, задайте .ControlSource адрес ячейки (предпочтительно именованный диапазон)
  5. Под "... прокручивайте с помощью мыши ..." Полагаю, вы имеете в виду колесо мыши.Формы Unfortunatley не поддерживают прокрутку колесика мыши.Вам придется кодировать его самостоятельно.Для этого есть патч Microsoft на здесь (сам еще не пробовал)

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

Private Sub cmbMonth_Change()
    Static idx As Long
    Dim Match As Boolean
    Dim i As Long

    If cmbMonth.Value = "" Then Exit Sub
    If idx = 0 Then idx = 1
    i = idx
    Match = False
    For i = 0 To cmbMonth.ListCount
        If cmbMonth.List((i + idx - 1) Mod cmbMonth.ListCount) Like cmbMonth.Value & "*" Then
           cmbMonth.ListIndex = (i + idx - 1) Mod cmbMonth.ListCount
           Match = True
           Exit For
        End If
    Next
    If Not Match Then
        cmbMonth.Value = Left(cmbMonth.Value, Len(cmbMonth.Value) - 1)
    End If
End Sub
1 голос
/ 17 октября 2011

Установите для свойства MatchEntry поля со списком значение 1 (fmMatchEntryComplete) и для свойства MatchRequired значение true, например

combobox1.MatchEntry=1
combobox1.MatchRequired=True

[] s

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...