Создать записываемый комбинированный список с VBA - PullRequest
1 голос
/ 28 мая 2019

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

У меня есть этот код, который создает коробку:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim lst
If Not Intersect([4:7], Target) Is Nothing And Target.Count = 1 Then
        Me.DropDowns.Delete
        With Worksheets("Listing")
            lst = "'" & .Name & "'!" & _
              .Range(.Range("a1"), _
              .Cells(.Rows.Count, 1).End(xlUp)).Address()
         End With
        With Me.Shapes.AddFormControl(xlDropDown, Left:=Target.Left, _
                                  Top:=Target.Top, Width:=60, Height:=15)
             .Name = "CB"
            .OnAction = "CB_Change"
            .ControlFormat.ListFillRange = lst

        End With
    End If
End Sub

Проблема в том, что созданные комбинированные списки позволяют пользователю выбирать, а не писать

Ответы [ 2 ]

2 голосов
/ 28 мая 2019

Если возможно, используйте вместо этого проверку данных.Это создаст доступный для записи комбо, основанный на значениях в ячейках J3: J5

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Not Intersect([4:7], Target) Is Nothing And Target.Count = 1 Then
        With Target.Validation
            .Delete
            .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="=$J$3:$J$5"
            .IgnoreBlank = True
            .InCellDropdown = True
            .InputTitle = ""
            .ErrorTitle = ""
            .InputMessage = ""
            .ErrorMessage = ""
            .ShowInput = True
            .ShowError = False
        End With

        ' This will expand the list
        Target.Select
        SendKeys "%{DOWN}"
    End If
End Sub
1 голос
/ 28 мая 2019

Элементы управления ActiveX легче настроить, чем элементы управления формы.MSForm.ComboBox элементы управления имеют свойство Style, которое при значении fmStyleDropDownCombo делает область текстового поля редактируемой;когда стиль fmStyleDropDownList, пользовательский ввод ограничен тем, что находится в раскрывающемся списке.

ComboBox1 properties

... с учетом сказанного, Проверка данных , вероятно, является лучшим вариантом (менее подвержен ошибкам, лучше интегрирован с рабочим листом / Excel, без зависимости MSForm), если вы можете жить с «кружком недопустимых данных», делая красные кружки вокруг «недопустимых данных», которыеразрешено вводить, но не в раскрывающемся списке:

DV red circle around invalid data

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