我有一个用于记录临时工数据的excel工作表。
在6列中,可以通过数据验证选择的选项不会更改,因此不会出现问题(工作日/加班天数等)。
我需要帮助的一件事是name列,在那里我想要一个activeX组合框,这样我就可以使用自动填充,并且能够随时添加新的名称。
与数据验证不同,数据验证可以拖动和复制一系列单元格(我通常不超过100个临时工作人员),我不知道如何使用组合框来完成这一任务,因此我的name列中的每一行都包含这个组合框。请给我建议。
发布于 2014-12-16 11:49:21
如果您不介意使用Form Control ComboBox而不是ActiveX,下面是我刚刚讨论的一个示例。我用的是月份而不是名字,因为我不知道你想用的名字。这个概念是一样的。
它在代码中以列表项的形式添加了几个月,尽管您可以使用一个值数组和一个循环来实现这一点。为了简单地演示如何以编程方式将ComboBoxes添加到单元格中,我只是对12个月进行了硬编码。
另外,为了这个例子,我只填充了第2行到第20行。
测试:
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注意:链接单元格返回所选内容的索引号。当值发生变化时,可以有一个事件,但在提供的示例中,linkedCell属性是可以的。
在本例中,我使用了几个月,因为它返回索引,所以我将值放在comboBox后面。我包括了一个屏幕截图来演示这一点,并将列的宽度留得足够宽,可以看到对象后面单元格的值。当然,您可以在comboBox的末尾有列宽度结束。
在E列中的单元格中,我有一个使用链接单元格值的公式:
=IF(A2="","",TEXT(A2*29,"mmmm"))这将返回下拉列表的月份名称。如果没有它,纸上就不会有任何东西真正代表下拉列表所做的选择。

链接:
Office支持:将ListBox或ComboBox控件添加到工作表中。
这里是一个问题的例子,我最近回答了,它使用UserForm来做几乎相同的事情,而不是工作表中的对象,或者在本例中是工作表中的许多对象。这就是为什么我更喜欢使用UserForms。您将有一个下拉列表,当更改时,代码将找到要操作的适当单元格,而不是每一行一个单元格。
https://stackoverflow.com/questions/27500984
复制相似问题