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

我在Excel的GCTrend的sheet页上插入一个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
展开
 我来答
zl998100
2014-06-03 · TA获得超过730个赞
知道小有建树答主
回答量:1067
采纳率:50%
帮助的人:1034万
展开全部
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
crazy0qwer
2014-06-03 · TA获得超过3299个赞
知道大有可为答主
回答量:4020
采纳率:71%
帮助的人:1267万
展开全部
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
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
万年金刚钻
2014-06-03 · TA获得超过1.6万个赞
知道大有可为答主
回答量:1.1万
采纳率:0%
帮助的人:3352万
展开全部
ListBox1引用:
baseSheet.Shapes(n)

n代表第几个Shape
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式