嘿,我似乎不明白为什么我的代码没有工作,因为我认为这是对SO中另一个问题的回答。我想从组合框中检索所选项目,因为我随后必须在匹配索引函数中使用它。这是我的代码
Option Explicit
Dim ws As Sheets
Sub test2()
Set ws = Sheets(Array("Sheet1", "Sheet2"))
With ws(1).Shapes("Drop Down 2").ControlFormat
.List(.ControlFormat.ListIndex) = ws(1).Range("I8").Value
End With
End Sub
另外,我想了解一般如何参考下拉菜单?因为我有10个这样的组合框(下拉列表),每个组合框在数字基础上有不同的名称。因此,而不是像#34; Drop Down 2"或者通过使用循环说("下拉"& i),是否有一种通用的方式来引用特定工作表上的下拉菜单?我真的需要帮助......
答案 0 :(得分:2)
这是检索所选项目值的方法:
Dim myindex As Long, myitem As String
Dim ws As Worksheet
Set ws = Sheets("Sheet1")
'~~> Currently selected item index at runtime
myindex = ws.Shapes("Drop Down 1").ControlFormat.Value
'~~> Currently selected item value at runtime
myitem = ws.Shapes("Drop Down 1").ControlFormat.List(myindex)
对于第二个问题,您可以使用形状集合对象 然后使用 For Each 循环结构。
Dim shp As Shape, ws As Worksheet: Set ws = Sheets("Sheet1")
Dim myindex As Long, myitem As String
'~~> Iterate the shapes collection object
For Each shp In ws.Shapes
'~~> Check the type
If shp.Type = msoFormControl Then
myindex = shp.ControlFormat.Value
myitem = shp.ControlFormat.List(myindex)
'~~> additional codes here
End If
Next
但是如果你需要在特定的 ComboBoxes 中做特定的事情,请使用你在问题中描述的内容。 HTH
<强> EDIT1:强>
For Each shp In ws.Shapes
'~~> Check the type
If shp.Type = msoFormControl Then
With shp.ControlFormat
myvalue = .List(.ListIndex)
End With
End If
Next
以上作品以及您的评论
至于为什么它仅在 With Clause 下工作,因为这基本上就是你使用 With 的原因。
以某种方式缩短代码。如果您想在没有 With 的情况下进行此操作,请使用以下内容:
myvalue = shp.ControlFormat.List(shp.ControlFormat.ListIndex)