【发布时间】: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 没有问题) -
您无法使用
Topindex或Listindex将项目移至列表顶部。您应该将位置指定为AddItem的第二个参数