【问题标题】:Setting TopIndex to programmatically generated ActiveX ComboBox将 TopIndex 设置为以编程方式生成的 ActiveX ComboBox
【发布时间】:2020-07-20 19:53:19
【问题描述】:

我正在尝试使用TopIndex 属性在 MS Excel 中设置几个 ActiveX ComboBoxe 列表的第一个值。 这应该很容易使用以下方法完成:

ComboBox1.TopIndex = *whatever* 

问题是我的组合框是使用循环动态生成的,所以我只能使用OLEObjects 对象来访问它们。

我尝试了以下方法:

i = 0
Do Until IsEmpty(Sheets("temp").Range("A1").Offset(0, i).Value)
        'First I create a Range to populate each ComboBox
        Set rngdata = Sheets("temp").Range(Sheets("temp").Range("A1").Offset(1, i), Sheets("temp").Range("A1").Offset(1, i).End(xlDown))
        'Now I create the ComboBoxs
        Set rng = Sheets("temp").Range("A1").Offset(0, i)
        With Sheets("temp").OLEObjects.Add(ClassType:="Forms.ComboBox.1", Link:=False, DisplayAsIcon:=False, Left:=rng.Left, Top:=rng.Top, Width:=rng.Width, Height:=rng.Height)
            .Name = "patapouf" & i 'name
            .Object.List = rngdata.Value 'Populate the list from rngdata
            .Object.AddItem "All" 'I add a new value "All"
            .Object.TopIndex = .Object.ListCount 'I put the choice "All" in first position
        End With
    i = i + 1
Loop

Excels 返回: “错误‘380’: 无法定义 TopIndex 属性。属性值无效。 (翻译自法语的原始错误:Erreur d'exécution 380 : Impossible de propriété TopIndex. Valeur de propriété non valide)。

错误来自这一行:

.Object.TopIndex = .Object.ListCount

我认为使用“.Object.TopIndex”不是处理 ActiveX ComboBox 的方式,但我找不到任何其他方式来制定它。

【问题讨论】:

  • 听起来你想要Listindex 属性(从 0 开始,而不是 1)?
  • ListIndex 不就是ComboBox列表中选中项的位置吗?如何更改列表顺序以将“全部”放在首位?
  • .Object.TopIndex = .Object.ListCount - 1
  • 和以前一样的错误。事实上,即使给它一个固定值也会返回相同的错误 380。例如 .Object.TopIndex = 5 不起作用(我有超过 5 个值,所以 5 没有问题)
  • 您无法使用TopindexListindex 将项目移至列表顶部。您应该将位置指定为AddItem 的第二个参数

标签: excel vba combobox


【解决方案1】:

正如 Rory 所指出的,该位置应指定为 AddItem 的第二个参数,而不是试图更改 TopIndex 的值。

这解决了问题。

【讨论】:

    猜你喜欢
    • 2012-12-06
    • 2011-01-15
    • 2018-01-30
    • 1970-01-01
    • 2018-02-02
    • 2019-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多