Переместить поле со списком при нажатии кнопки на следующую строку Excel VBA

Я создал код vba для создания поля со списком и заполнил его именованным диапазоном. Теперь я хочу, чтобы когда я выбираю что-то из поля со списком, оно должно было установить это значение в этой текущей ячейке, и оно должно перейти к следующей строке, чтобы я мог продолжать устанавливать значение в каждой ячейке из поля со списком.

у меня есть следующий код для создания поля со списком, но я не знаю, как заставить его перейти к следующей строке с помощью .onaction

Sub AddComboBoxes()
Dim cb As Object
Dim aCell As Range, r As Long


For i = 1 To 1
    Set aCell = Sheet1.Cells(i, 5)
    Set cb = Sheet1.OLEObjects.Add(ClassType:="Forms.ComboBox.1", Left:=aCell.Left, Top:=aCell.Top, Width:=aCell.Width, Height:=aCell.Height)
    cb.Placement = xlMoveAndSize
    cb.Name = "ComboBoxN1"
    cb.ListFillRange = "N1"
    cb.OnAction = "N1.value"

Next

End Sub

Пожалуйста помоги.


person Shan S    schedule 13.10.2013    source источник
comment
.OnAction принадлежит не OLEObjects, а DropDowns   -  person Siddharth Rout    schedule 13.10.2013


Ответы (1)


Как я уже говорил, .OnAction принадлежит не OLEObjects, а DropDowns.

Посмотрите этот пример, который создаст раскрывающиеся списки 5 раз в столбце 5 и назначит "Sheet2!A1:A5" как ListFillRange и выполнит CallMe при выборе параметра в раскрывающемся списке.

ЛОГИКА:

  1. Назовите ваши DropDowns, например, "ComboBoxN" & i в цикле, чтобы мы могли получить строку, в которой они находятся позже.
  2. В вашем сообщении говорится, что значение комбо должно быть установлено в текущей ячейке. Я использую ячейки Col A в моем примере ниже. Измените как применимо.
  3. Я предполагаю, что ваши DropDowns начинаются с первой строки. Если нет, то вам придется изменить логику определения номера строки в Sub CallMe()

Код:

Sub AddComboBoxes()
    Dim cb As Object
    Dim aCell As Range
    Dim i As Long

    For i = 1 To 5
        Set aCell = Sheet1.Cells(i, 5)
        Set cb = Sheet1.DropDowns.Add(aCell.Left, aCell.Top, aCell.Width, aCell.Height)
        cb.Placement = xlMoveAndSize
        cb.Name = "ComboBoxN" & i
        cb.ListFillRange = "Sheet2!A1:A5"
        cb.OnAction = "CallMe"
    Next
End Sub

Ваш CallMe должен быть примерно таким

Sub CallMe()
    Dim rw As Long
    Dim cb As Object

    '~~> Extract the number from the dropdown to
    '~~> identify which row is it in
    rw = Val(Trim(Replace(Application.Caller, "ComboBoxN", "")))

    Set cb = Sheet1.DropDowns(rw)

    '~~> We are setting the value in Col A. Chnage as applicable
    Sheet1.Range("A" & rw).Value = cb.Value

    '~~> Activate the next cell.
    Sheet1.Range("A" & rw + 1).Activate
End Sub

Скриншот:

введите здесь описание изображения

person Siddharth Rout    schedule 13.10.2013