0

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

请帮忙。

4

1 回答 1

3

就像我提到.OnAction的,它不是属于的,OLEObjects而是属于的DropDowns

请参阅此示例,该示例将在 Col 5 中创建 5 次下拉菜单,并在您选择 DropDown 中的选项时指定"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

截屏:

在此处输入图像描述

于 2013-10-13T12:37:06.083 回答