【问题标题】:activex-combobox for name column in excelexcel中名称列的activex-combobox
【发布时间】:2014-12-16 20:14:37
【问题描述】:

我有一张用于记录临时工数据的 Excel 表格。

在 6 列中,可以通过数据验证选择的选项不会改变,因此不成问题。(工作天数范围/加班等)。

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

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

【问题讨论】:

标签: excel combobox vba


【解决方案1】:

如果您不介意使用 Form Control ComboBox 代替 ActiveX,这里是我刚刚编写的一个示例。我使用月份而不是名称,因为我不知道您要使用的名称。概念是一样的。

它在代码中添加月份作为列表项,尽管您可以使用一组值和一个循环来代替。为了简单地演示以编程方式将组合框添加到单元格,我只是硬编码了 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 属性很好。

在这个例子中,我使用了几个月,因为它返回索引,所以我将值放在组合框后面。我包含了一个屏幕截图来演示这一点,并让列宽足够宽以查看对象后面单元格的值。您当然可以将列宽结束在组合框的末尾。

在 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 来做几乎相同的事情,而不是工作表中的对象,或者在这种情况下工作表中的许多对象。这就是为什么我更喜欢使用 UserForms。您将有一个下拉列表,当更改时,代码会找到要操作的适当单元格,而不是每一行一个。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-09
    • 2014-07-28
    • 1970-01-01
    • 2022-01-14
    相关资源
    最近更新 更多