gpt4 book ai didi

vba - 从组合框(表单控件)excel VBA中检索选定的选项

转载 作者:行者123 更新时间:2023-12-04 20:16:16 24 4
gpt4 key购买 nike

嘿,我似乎不明白为什么我的代码不起作用,因为我认为这是对 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 个这样的组合框(下拉菜单),每个组合框的名称都不同。因此,不是指像“Drop Down 2”这样的特定下拉菜单或通过使用循环说(“Drop Down”&i),是否有一种通用的方式来指代特定工作表上的下拉菜单?我真的需要帮助..

最佳答案

这是您检索所选项目值的方式:

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

但是,如果您需要在特定组合框中执行特定操作,请使用您在问题中描述的内容。高温高压

编辑1:
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 子句下有效,是因为这基本上就是你使用 With 的原因。
以某种方式缩短代码。如果您想在没有 With 的情况下执行此操作,请使用以下命令:
myvalue = shp.ControlFormat.List(shp.ControlFormat.ListIndex)

关于vba - 从组合框(表单控件)excel VBA中检索选定的选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24506130/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com