我有一张excel表,用于记录临时工数据。
在6列中,可以通过数据验证选择的选项不会更改,因此不会出现问题。(工作天数/加班时间等)。
我需要帮助的一件事就是名称列,我想要一个activeX组合框,这样我就可以使用自动填充功能,并且可以随时添加新名称。
与数据验证不同,数据验证可以在一系列单元格中拖放(我通常只有100名临时工),我不确定如何使用组合框执行此操作,因此我的名称列的每个新行都包含该组合框。请指教。
答案 0 :(得分:1)
如果您不介意使用表单控件组合框而不是ActiveX,这是我刚刚编写的一个示例。我用了几个月而不是名字,因为我不知道你想要使用的名字。这个概念是一样的。
它在代码中添加了几个月作为列表项,尽管您可以使用值数组和循环来执行此操作。为了简单地演示以编程方式将ComboBox添加到Cells中,我只是硬编码了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 Support: Add a ListBox or ComboBox control to a Worksheet.
Here is an example of a question我最近回答使用UserForm 做了几乎相同的事情,而不是Sheet中的对象,或者在这种情况下表单中的MANY对象。这就是我更喜欢使用UserForms的原因。您将有一个下拉列表,当更改时,代码会找到要操作的相应单元格,而不是每行一个。