在Excel上插入一个listbox组件,在VBA中我想用这个listbox组件作为对象,获取选择的listbox里的值。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Excel上插入一个listbox组件,在VBA中我想用这个listbox组件作为对象,获取选择的listbox里的值。相关的知识,希望对你有一定的参考价值。

我在Excel的GC Trend 的sheet页上插入一个listbox组件,在VBA中我想用这个listbox组件作为对象,获取选择的listbox里的值。这是我自己参考写的,不知道为啥运行有错误,而且应该也获取不到,想求哪位大侠帮忙!!
Sub Refresh_all()
Dim baseSheet As Worksheet
Dim str As String
Dim listbox As listbox
If baseSheet.ListObjects.Count = 0 Then Exit Sub
For Each listbox In baseSheet.ListObjects
str = listbox.selectedValue
MsgBox "&str&"
Next listbox
End Sub

MsgBox "&str&"

改成
msgbox str
另外baseSheet 你没有指定对象

set baseSheet= sheets("表的名称")追问

我改成如下:  

    Set baseSheet = Sheets("GC Trend")

    If baseSheet.ListObjects.Count = 0 Then Exit Sub当debug到这的时候就跳出去了,说明没有Listbox,但是我有啊(如图),为什么呢?

追答Sub showselectedvalues()
Dim OBJ As OLEObject, n%, i%, j%, sh As Worksheet
Set sh = Sheets("sheet3") \'指定工作表,自己根据需要修改
For Each OBJ In sh.OLEObjects
    If TypeOf OBJ.Object Is MSForms.listbox Then n = n + 1 \'获取工作表内列表框个数n
Next

For i = 1 To n
    For j = 0 To sh.OLEObjects("ListBox" & i).Object.ListCount - 1
        If sh.OLEObjects("ListBox" & i).Object.Selected(j) Then MsgBox sh.OLEObjects("ListBox" & i).Object.List(j)
    Next j
Next i
End Sub
参考技术A ListObjects 并不是表示列表框,而表示表格(插入---表格)。
如果是 activex 控件可以用 OLEObjects
如果是 表单控件,可以用 shapes追问

For i = 0 To baseSheet.Shapes.Count - 1-->debug到这时count是16
str = baseSheet.Shapes(i).selectedValue-->这里报错说the index into the specified collection is out of bounds.求解答!

追答

shapes 包括的对象有很多,比如插入的图片,线条,和控件等等。

oleobjects 则只包括activex控件。

oleobjects  是 shapes的一个子集,也就是说 oleobjects 的控件都可以在shapes中找到。

所以 不管用哪个,都是需要判断它是否为列表框。


如果你的列表框是 表单控件,那只能通过它连接的单元格来取值了。

你需要获取选中的值,建议你还是用 ActiveX 控件来做。代码如下:

Sub AAA()
    Dim O   As Shape
    Dim L   As Object
    For Each O In Shapes
        If O.Type = msoOLEControlObject Then
            If O.OLEFormat.Object.progID = "Forms.ListBox.1" Then
                    Set L = OLEObjects(O.Name).Object
                    For I = 0 To L.ListCount - 1
                        If L.Selected(I) Then
                            S = S & vbCrLf & L.List(I)
                        End If
                    Next
                MsgBox "列表框 """ & O.Name & """ 的值为: " & S
                S = ""
            End If
        End If
    Next
End Sub

参考技术B ListBox1引用:
baseSheet.Shapes(n)

n代表第几个Shape

以上是关于在Excel上插入一个listbox组件,在VBA中我想用这个listbox组件作为对象,获取选择的listbox里的值。的主要内容,如果未能解决你的问题,请参考以下文章

访问 VBA 是不是有 Listbox.List 方法,因为 excel VBA 有

在excel VBA中单击listbox_click()后如何检索复选框的复选框

VBA Excel:列表框自动滚动

VBA中怎么读取listbox特定行列的内容?

vba 怎么实现在excel中搜索窗体textbox中的内容

使用Excel VBA调整列表框以显示比列表框宽度更长的字符串