将combobox的button移到下一行excel VBA

我创build了一个vba代码来创buildcombobox,并填充了我的命名范围。 现在我想让我从一个combobox中select一些东西时,它必须在当前单元格中设置该值,它应该移动到下一行,以便我可以在combobox中的每个单元格中设置一个值。

我有下面的代码来创buildcombobox,但我不知道如何使它移动到下一行

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 

请帮忙。

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

看到这个例子,它将在Col 5中创build5次下拉列表,并将"Sheet2!A1:A5"分配为ListFillRange并在DropDown中select一个选项时执行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 

截图:

在这里输入图像说明