如何让用户在Excel中指定多个级别的类别?

我正在用Excel 2007开发一种模板。用户将使用它来创build属于三级类别的logging。 用户应该能够创build一个新的类别,指定一个现有的类别或不指定一个。 logging可能属于多个类别。

我想知道我的最佳select是向用户展示类别结构。 类别是标签,所以基本上不需要VBA编程。 Excel中是否有适合这种情况的控件或function?

我只是使用内置的数据validationfunction。 将它指向一个列表,然后用户将会看到一个浮点级别的下拉菜单。 编辑:好吧,那么这里的基本原则是链表。 每个子类别都有类别文本和父类别。 每当主类别发生变化时,您都要重新筛选子类别以仅显示属于该父类别的项目。

有很多方法来实现这个想法。 这是一个微不足道的例子。 要使用它,用两个combobox创build一个用户表单并粘贴代码。

Option Explicit Private masCat2() As String Private Sub UserForm_Initialize() Me.ComboBox1.List = CreateTestData(0) With Me.ComboBox2 masCat2 = CreateTestData(1) End With End Sub Private Sub ComboBox1_Change() Me.ComboBox2.List = FilterArray(masCat2, Me.ComboBox1.Value) End Sub Private Function FilterArray(ByRef vals() As String, ByVal match As String) As String() Dim i As Long, j As Long Dim asVals() As String ReDim asVals(UBound(vals, 1)) As String For i = 0 To UBound(vals, 1) If vals(i, 0) = match Then asVals(j) = vals(i, 1) j = j + 1 End If Next ReDim Preserve asVals(j - 1) FilterArray = asVals End Function Private Function CreateTestData(ByVal series As Long) As String() Dim asRtnVal() As String Select Case series Case 0 ReDim asRtnVal(1) As String asRtnVal(0) = "Thing1" asRtnVal(1) = "Thing2" Case 1 ReDim asRtnVal(3, 1) As String asRtnVal(0, 0) = "Thing1" asRtnVal(1, 0) = "Thing1" asRtnVal(2, 0) = "Thing2" asRtnVal(3, 0) = "Thing2" asRtnVal(0, 1) = "ThingA" asRtnVal(1, 1) = "ThingB" asRtnVal(2, 1) = "ThingC" asRtnVal(3, 1) = "ThingD" End Select CreateTestData = asRtnVal End Function 

用户应该能够创build一个新的类别,指定一个现有的类别或不指定一个。 logging可能属于多个类别。

问题 – 如果用户为该类别的任何级别指定一个新条目,那么新条目是否应该成为后面行中显示的选项列表的一部分?

如果是这样的话,那么用excel公式和validation就可以轻松完成。 相反,您应该使用combobox在线searchdynamic列表的VBA示例。