复选框,用于Excel中单个单元格中的多个值

时间:2014-04-27 02:41:59

标签: excel excel-vba excel-2007 vba

我是C#/ .NET开发人员,但对Excel编程或VBA不太熟悉。对于辅助项目,我有一个电子表格,非技术用户将使用该电子表格进行数据输入。稍后,这个电子表格将通过我编写的C#命令行程序导出为不同的格式,以便将数据转储到不同的系统中。

我需要输入与命令行程序预期完全相同的数据值,因此由于拼写错误或轻微的措辞差异而导致的用户错误会出现问题。我需要用户从可能的值中进行选择,而不是依赖于用户输入正确的值。

对于单元格中只能包含单个值的列,我可以通过使用用户可以选择的下拉菜单来完成此操作。我是通过这里的说明做到的:

http://office.microsoft.com/en-us/excel-help/insert-or-delete-a-drop-down-list-HP010072599.aspx

问题是,我有几个列,其单元格可以包含多个值,以逗号分隔。例如,我有一个“颜色”列。该列中的单元格的值可以是单色(例如“红色”)或由逗号分隔的颜色列表(例如“红色,绿色,蓝色”)。理想情况下,我希望用户能够单击单元格并查看可以从中选择颜色的复选框列表,完成后,单元格将使用逗号分隔的颜色进行更新。

实现这一目标的最佳方法是什么?我试过谷歌搜索并找到了这个方法:

http://www.contextures.com/excel-data-validation-multiple.html

...允许从下拉菜单中选择多个项目,但这很不方便,因为每次需要添加其他项目时都必须重新打开下拉列表。复选框会更方便。这是可能的,如果是的话,怎么样?

2 个答案:

答案 0 :(得分:7)

试试这个:

Option Explicit
Dim fillRng As Range
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Dim LBColors As MSForms.ListBox
Dim LBobj As OLEObject
Dim i As Long

Set LBobj = Me.OLEObjects("LB_Colors")
Set LBColors = LBobj.Object

    If Not Intersect(Target, [B2]) Is Nothing Then
        Set fillRng = Target
        With LBobj
            .Left = fillRng.Left
            .Top = fillRng.Top
            .Width = fillRng.Width
            .Visible = True
        End With
    Else
        LBobj.Visible = False
        If Not fillRng Is Nothing Then
            fillRng.ClearContents
            With LBColors
                If .ListCount <> 0 Then
                    For i = 0 To .ListCount - 1
                        If fillRng.Value = "" Then
                            If .Selected(i) Then fillRng.Value = .List(i)
                        Else
                            If .Selected(i) Then fillRng.Value = _
                                fillRng.Value & "," & .List(i)
                        End If
                    Next
                End If
                For i = 0 To .ListCount - 1
                    .Selected(i) = False
                Next
            End With
            Set fillRng = Nothing
        End If
    End If

End Sub

在上面的代码中,我使用了OleObject类型的MsForm.Listbox 首先设置已经讨论HEREListbox OleObject 在上面的代码中,我将Listbox命名为LB_Colors,可以通过访问其属性进行更改。

假设您设置了如下数据:

enter image description here

上面的代码在进行选择时执行 如果选择等于B2,则会显示创建的ListBox对象。

enter image description here

我们将ListBox对象位置(左,上)和宽度设置为B2,因此它看起来像下拉。
然后,用户可以选择值。

enter image description here

当用户对选择感到满意时,只需点击ListBox即可 选择将写在B2中,ListbBox将再次隐身。如下所示。

enter image description here

这是你正在尝试的吗?

答案 1 :(得分:1)

Excel具有Userforms的功能,类似于.NET的WinForms项目类型,它们的工作方式非常相似。从excel中的代码编辑器中,右键单击资源管理器窗口中的模块文件夹并添加Userform。设计师将表明它与VS2013中的相似(尽管不像华而不实)。表单也会在事件类型系统中运行。

您可以使用formName.Show来调用您的用户表单。

从那里,实现输入限制,并将输入编制到单元格所需的字符串中。

祝你好运!

添加了: 您可能希望设置工作表事件,以便在激活特定单元格以打开表单时。这样,他们只需点击单元格而不必运行任何东西。