微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何创建一个不是 ActiveX 控件的“两列”下拉框,我可以在其中以编程方式填充此框并在 Excel VBA 中使用它?

如何解决如何创建一个不是 ActiveX 控件的“两列”下拉框,我可以在其中以编程方式填充此框并在 Excel VBA 中使用它?

背景

假设我有一个示例列表,其中包含从数据库中检索到的 (id,description) 对,并且列表如下所示:

1,aadvark
2,bubbles
3,carrot
4,depict

我想做什么:

我希望能够:

  1. 以编程方式将检索到的对从数据库复制到下拉框中,用户可以在其中选择列表选项之一
  2. 用户能够从上面的列表中选择所需的 description
  3. 以编程方式使用 id,例如,在 id 弹出窗口中显示 MsgBox 以确认用户的选择

到目前为止我所做的

我可以使用 ActiveX ComboBox 控件来做到这一点,我在其中设置了两列,第一列获得 id,第二列获得 description用户选择一个描述,并在内部使用生成id 进行进一步处理。但是,我遇到了cannot resolve with the ActiveX controls的问题,所以我正在寻找不同的方法,希望不同的方法不会有问题。

可以用表单控件组合框做类似的事情吗?还是直接使用Excel Cells?请指教。理想情况下,我正在寻找一个包含代码的答案,其中可以使用 Form Control 组合框或 Excel 的 Cell 构造和其他本机设施来实现所需的功能

解决方法

您可以使用表单控件组合框。

我目前没有英文版的 Excel 可供参考,我正在猜测实际的菜单项,但右键单击您嵌入的组合框,然后选择控制格式(?),然后在远处右选项卡(控制?),选择第一个文本框(输入范围?)并选择您的范围。

假设我在 WorkSheet 1 上有一个名为 cbTest 的组合框,在该工作表的模块中,我可以这样引用它。

Sub Test()
    Dim oCBTest As Object

    Set oCBTest = Me.Shapes("cbTest")
    
    With oCBTest

        Debug.Print .Name
        
        Debug.Print .ControlFormat.ListCount
    
        Debug.Print .ControlFormat.List(1)

    End With

    Set oCBTest = Nothing
    
End Sub

如果您不确定如何使用立即窗口,请将 Debug.Print 替换为 MsgBox

link 显示了可能证明有用的各种示例。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。