在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
另外baseSheet 你没有指定对象
set baseSheet= sheets("表的名称")追问
我改成如下:
Set baseSheet = Sheets("GC Trend")
If baseSheet.ListObjects.Count = 0 Then Exit Sub当debug到这的时候就跳出去了,说明没有Listbox,但是我有啊(如图),为什么呢?
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()后如何检索复选框的复选框