excel中名称列的activex-combobox

我有一张用于logging临时工数据的Excel工作表。

在6列中,可以通过数据validationselect的选项不会改变,因此不是问题(日常工作的范围/加class等)。

我需要帮助的一件事就是名称列,我想要一个activeXcombobox,所以我可以使用自动填充,并有能力随时添加新的名称。

与数据validation不同,它可以在单元格范围内(通常不超过100个临时工)进行拖放和复制,我不确定如何用combobox执行此操作,所以我的名称列中的每一行都包含该combobox。 请指教。

如果你不介意使用表单控件combobox而不是ActiveX,下面是我刚刚完成的一个例子。 我用了几个月而不是名字,因为我不知道你想用的名字。 这个概念是一样的。

它在代码中增加了几个月的列表项,尽pipe你可以用一个数组来做到这一点,而用循环来代替。 为了简单地展示编程向单元格添加ComboBoxes,我只是硬编码了12个月。

另外,为了示例的目的,我只是填充了第2到第20行。

testing:

Sub addComboBoxes() Dim sheet As String Dim newName As String Dim lRow As Long 'Dim lastRow As Long 'Not using for this example. Worth keeping in mind the option. sheet = "Sheet1" 'Set Sheet Name 'lastRow = Sheets(sheet).Range("A" & Rows.Count).End(xlUp).row For lRow = 2 To 20 'Choose Row Limitations, perhaps 2 To lastRow newName = "cmbAuto" & lRow Set cmbMonthRow = Sheets(sheet).Shapes.AddFormControl _ (xlDropDown, Left:=Cells(1, 1).Left, Top:=Cells(lRow, 1).Top, Width:=60, Height:=15) With cmbMonthRow .ControlFormat.LinkedCell = "A" & lRow .ControlFormat.AddItem "January", 1 .ControlFormat.AddItem "February", 2 .ControlFormat.AddItem "March", 3 .ControlFormat.AddItem "April", 4 .ControlFormat.AddItem "May", 5 .ControlFormat.AddItem "June", 6 .ControlFormat.AddItem "July", 7 .ControlFormat.AddItem "August", 8 .ControlFormat.AddItem "September", 9 .ControlFormat.AddItem "October", 10 .ControlFormat.AddItem "November", 11 .ControlFormat.AddItem "December", 12 .ControlFormat.DropDownLines = 12 .Name = newName End With Next lRow End Sub 

注意:链接的单元格返回select的索引号。 你可以有一个事件的值改变,但在提供的例子中,linkedCell属性是好的。

在这个例子中,我已经使用了几个月,并且因为它返回索引,所以我把值放在comboBox的后面。 我包含了一个截图来演示这个,并将列宽保持足够宽,以查看对象后面单元格的值。 你当然可以只是在comboBox的结尾处有列宽结束。

在列E的单元格中,我有一个使用链接单元格的公式:

 =IF(A2="","",TEXT(A2*29,"mmmm")) 

这将返回下拉列表的月份名称。 没有它,表单上就没有任何实际上代表下拉选项的选项。
结果

链接:

Office支持:将一个ListBox或ComboBox控件添加到工作表。

下面是一个最近使用UserForm来回答问题的例子,它可以做几乎相同的事情,而不是工作表中的对象,或者在这种情况下工作表中的许多对象。 这就是为什么我更喜欢使用UserForms。 您将有一个下拉列表,当更改时,代码将find适当的单元格进行操作,而不是每行一个。