activex-combobox用于excel中的name列

时间:2014-12-16 09:07:12

标签: excel excel-vba combobox vba

我有一张excel表,用于记录临时工数据。

在6列中,可以通过数据验证选择的选项不会更改,因此不会出现问题。(工作天数/加班时间等)。

我需要帮助的一件事就是名称列,我想要一个activeX组合框,这样我就可以使用自动填充功能,并且可以随时添加新名称。

与数据验证不同,数据验证可以在一系列单元格中拖放(我通常只有100名临时工),我不确定如何使用组合框执行此操作,因此我的名称列的每个新行都包含该组合框。请指教。

1 个答案:

答案 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"))

这将返回下拉列表的月份名称。如果没有它,表单上的任何内容都不会实际代表下拉菜单的选择 Result

<强>链接:

Office Support: Add a ListBox or ComboBox control to a Worksheet.

Here is an example of a question我最近回答使用UserForm 做了几乎相同的事情,而不是Sheet中的对象,或者在这种情况下表单中的MANY对象。这就是我更喜欢使用UserForms的原因。您将有一个下拉列表,当更改时,代码会找到要操作的相应单元格,而不是每行一个。