none
ListBox控件的选定类型为复选或扩展时,链接单元格不能正确显示Listbox中的选项 RRS feed

  • 问题

  • 如题所示,请问既然当ListBox控件选定类型为复选或扩展时,链接单元格不能正常显示ListBox中选项的index,那这两个选项有什么用呢?


    foch
    2011年11月7日 9:57

答案

  • 在VBA编程环境中,点视图→对象浏览器→在类一栏上右击→选取“显示隐含成员”,这样就能看到这些默认被隐藏的窗体控件了。

    我测试了一下,VBA是可以控制窗体控件多选的,下面的代码将选择的结果显示在G9和G10单元格里,希望对你有帮助:

    Sub ListBox1_Change()
        Dim selectedOnes() As String
        Dim i As Integer
        Dim countRedim As Integer
        Dim LBnames() As String
        
        countRedim = 0
        
        For i = 1 To 5
            If ActiveSheet.ListBoxes(1).Selected(i) Then
                ReDim Preserve selectedOnes(0 To countRedim)
                selectedOnes(countRedim) = i
                ReDim Preserve LBnames(0 To countRedim)
                LBnames(countRedim) = ActiveSheet.ListBoxes(1).List(i)
                countRedim = countRedim + 1
            End If
        Next i
        
        Range("G9").Value = Join(selectedOnes, ", ")
        Range("G10").Value = Join(LBnames, ", ")
    End Sub


    运行结果如下图:


    Microsoft Technet Observer 如果问题没有解决,请继续跟帖讨论;如果问题得到解决,请标记为答复。
    • 已标记为答案 mrfoch 2011年11月10日 9:16
    2011年11月9日 16:58
    版主

全部回复

  • 如果为单项选择 (xlNone),则每次只允许选择一项。单击鼠标或按空格键将取消原先的选择项,并选定正在单击的项。

    如果为简单的多项选择 (xlSimple),当用鼠标单击选定某选项,或在突出显示选项上按空格键时,可切换该选项的选定状态,此方式适用于经常需要选定多个选项的列表。

    如果为扩展多项选择 (xlExtended),其作用与单项选择列表框一样,单击某选项将选定该选项并取消选定其他选项。按住 Shift 单击鼠标或按箭头键,可从当前选项开始顺序选定多个选项。按住 Ctrl 单击选项,可在选定项集合中添加选中项。此方式适用于允许多项选择但又不经常使用的列表。

    可使用 Value 属性或 ListIndex 属性返回或设置单项选择列表框的选定项。

    不能使用 LinkedCell 属性对多项选择列表框进行链接。

    Microsoft Technet Observer 如果问题没有解决,请继续跟帖讨论;如果问题得到解决,请标记为答复。
    2011年11月7日 15:46
    版主
  • 您好。非常感谢您的回复。

    抱歉我没有指明是Excel工作表中插入的普通Listbox控件,而不是ActiveX中的Listbox控件。我想您回答的应该是ActiveX控件中的ListBox控件。

    当然您所讲的内容对这两种控件来说应该是通用的。

     ActiveCell.Value = ActiveSheet.ListBoxes("列表框 1").Value

    ❤插问:ListBoxes等集合在VBA中为什么都不可见呢?

    ❤我想问如果不写代码的话下图的这个“选定类型”是否只是个摆设呢?还是有其它的用法?


    foch
    2011年11月8日 9:09
  • 在VBA编程环境中,点视图→对象浏览器→在类一栏上右击→选取“显示隐含成员”,这样就能看到这些默认被隐藏的窗体控件了。

    我测试了一下,VBA是可以控制窗体控件多选的,下面的代码将选择的结果显示在G9和G10单元格里,希望对你有帮助:

    Sub ListBox1_Change()
        Dim selectedOnes() As String
        Dim i As Integer
        Dim countRedim As Integer
        Dim LBnames() As String
        
        countRedim = 0
        
        For i = 1 To 5
            If ActiveSheet.ListBoxes(1).Selected(i) Then
                ReDim Preserve selectedOnes(0 To countRedim)
                selectedOnes(countRedim) = i
                ReDim Preserve LBnames(0 To countRedim)
                LBnames(countRedim) = ActiveSheet.ListBoxes(1).List(i)
                countRedim = countRedim + 1
            End If
        Next i
        
        Range("G9").Value = Join(selectedOnes, ", ")
        Range("G10").Value = Join(LBnames, ", ")
    End Sub


    运行结果如下图:


    Microsoft Technet Observer 如果问题没有解决,请继续跟帖讨论;如果问题得到解决,请标记为答复。
    • 已标记为答案 mrfoch 2011年11月10日 9:16
    2011年11月9日 16:58
    版主
  • 非常感谢您的回答。对我很有帮助!又长见识了,^_^
    foch
    2011年11月10日 9:17