我创建了一个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
请帮忙。
答案 0 :(得分:3)
就像我提到的那样,.OnAction
不是OLEObjects
的属性,而是DropDowns
的属性
请参阅此示例,该示例将在第5列中创建5次下拉菜单,并将"Sheet2!A1:A5"
指定为ListFillRange
,并在DropDown中选择一个选项时执行CallMe
。
<强> LOGIC:强>
"ComboBoxN" & i
,以便我们可以检索以后的行。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
<强>截图:强>