将Combobox单击按钮移动到下一行excel VBA

时间:2013-10-13 11:30:28

标签: excel vba excel-vba combobox

我创建了一个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

请帮忙。

1 个答案:

答案 0 :(得分:3)

就像我提到的那样,.OnAction不是OLEObjects的属性,而是DropDowns的属性

请参阅此示例,该示例将在第5列中创建5次下拉菜单,并将"Sheet2!A1:A5"指定为ListFillRange,并在DropDown中选择一个选项时执行CallMe

<强> LOGIC:

  1. 在循环中将您的DropDowns命名为"ComboBoxN" & i,以便我们可以检索以后的行。
  2. 您的帖子说应该在当前单元格中设置组合的值。我在下面的例子中使用Col A单元格。适用时更改。
  3. 我假设您的DropDowns从第一行开始。如果没有,那么您将不得不更改确定Sub CallMe()
  4. 中行号的逻辑

    <强>代码:

    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
    

    <强>截图:

    enter image description here