首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >activex-用于excel中名称列的组合框。

activex-用于excel中名称列的组合框。
EN

Stack Overflow用户
提问于 2014-12-16 09:07:12
回答 1查看 822关注 0票数 0

我有一个用于记录临时工数据的excel工作表。

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

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

与数据验证不同,数据验证可以拖动和复制一系列单元格(我通常不超过100个临时工作人员),我不知道如何使用组合框来完成这一任务,因此我的name列中的每一行都包含这个组合框。请给我建议。

EN

回答 1

Stack Overflow用户

发布于 2014-12-16 11:49:21

如果您不介意使用Form Control ComboBox而不是ActiveX,下面是我刚刚讨论的一个示例。我用的是月份而不是名字,因为我不知道你想用的名字。这个概念是一样的。

它在代码中以列表项的形式添加了几个月,尽管您可以使用一个值数组和一个循环来实现这一点。为了简单地演示如何以编程方式将ComboBoxes添加到单元格中,我只是对12个月进行了硬编码。

另外,为了这个例子,我只填充了第2行到第20行。

测试:

代码语言:javascript
运行
复制
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列中的单元格中,我有一个使用链接单元格值的公式:

代码语言:javascript
运行
复制
=IF(A2="","",TEXT(A2*29,"mmmm"))

这将返回下拉列表的月份名称。如果没有它,纸上就不会有任何东西真正代表下拉列表所做的选择。

链接:

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27500984

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档