【问题标题】:ActiveX combo box with dynamically-chosen list具有动态选择列表的 ActiveX 组合框
【发布时间】:2019-11-27 12:01:49
【问题描述】:

我在看这个问题:How to create and populate ActiveX combo box

我想知道,当项目列表来自某个范围时,如何实现以及如何指定列表应该放置在哪个单元格中。

此外,从两个不同的工作表中获得一系列值可能会很好。

Sub CreateComboBox1()
    With ActiveSheet.OLEObjects.Add(ClassType:="Forms.ComboBox.1", _
                Link:=False, DisplayAsIcon:=False, Left:=50, Top:=80, Width:=100, _
                Height:=15)
        With .Object
            .AddItem "Date"
            .AddItem "Player"
            .AddItem "Team"
            .AddItem "Goals"
            .AddItem "Number"
        End With
    End With
End Sub

【问题讨论】:

    标签: excel vba combobox activex


    【解决方案1】:

    我稍微调整了您的代码以清理它。避免使用ActiveSheet,而是使用对您感兴趣的工作表的显式引用。您还应该将对象存储到变量中:

    Option Explicit
    
    Sub CreateComboBox1()
    
    Dim sht As Worksheet
    Dim cb As ComboBox
    Dim sourceRange As Range
    Set sht = ThisWorkbook.Worksheets("Name of your worksheet")
    Set sourceRange = sht.Range("A1:A10") 'example source range
    
    Set cb = sht.OLEObjects.Add(ClassType:="Forms.ComboBox.1", Link:=False, DisplayAsIcon:=False, Left:=50, Top:=80, Width:=100, Height:=15).Object
    cb.List = sourceRange.Value
    
    End Sub
    

    基本上你可以使用.List属性来指定源范围。

    另一种方法是使用For-Each 循环,循环遍历要添加到列表中的项目。这样您就可以将来自不同工作表的两个不同范围的项目添加到列表中:

    Option Explicit
    
    Sub CreateComboBox1()
    Dim cell As Range
    Dim sht1 As Worksheet
    Dim sht2 As Worksheet
    Dim cb As ComboBox
    Dim sourceRange1 As Range
    Dim sourceRange2 As Range
    
    Set sht1 = ThisWorkbook.Worksheets("Name of your worksheet 1")
    Set sht2 = ThisWorkbook.Worksheets("Name of your worksheet 2")
    Set sourceRange1 = sht1.Range("A1:A10")
    Set sourceRange2 = sht2.Range("A1:A10")
    
    Set cb = sht1.OLEObjects.Add(ClassType:="Forms.ComboBox.1", Link:=False, DisplayAsIcon:=False, Left:=50, Top:=80, Width:=100, Height:=15).Object
    
    For Each cell In sourceRange1
        cb.AddItem cell.Value
    Next cell
    For Each cell In sourceRange2
        cb.AddItem cell.Value
    Next cell
    
    End Sub
    

    【讨论】:

    • 这就是我遵循的方法:pastebin.com/rK026Czr 组合框出现,但它立即在“Set cb ...”行引发错误:错误:438 当然是因为目标没有左侧,顶部等属性。如何参考所选单元格的位置?
    • 知道了,问题出在组合范围内!不幸的是,组合框选择没有粘贴为值单元格,有什么方法可以实现吗?
    • 你不能仅仅连接属于不同工作表的两个范围的地址来获得一个组合范围。联合也不适用于工作表。做到这一点的方法是我上面演示的方法。您必须逐个遍历范围并将它们的项目添加到列表中。
    猜你喜欢
    • 2021-11-09
    • 2018-12-22
    • 1970-01-01
    • 2011-09-01
    • 2019-06-12
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    • 2017-06-22
    相关资源
    最近更新 更多