【问题标题】:VBA clear ActiveX combobox listVBA 清除 ActiveX 组合框列表
【发布时间】:2019-06-12 17:46:07
【问题描述】:

如何使用 VBA 清除 Excel ActiveX ComboBox 列表。我希望这段代码可以工作:

Sheet1.OLEObjects(1).Clear

但它提高了

运行时错误对象不支持此属性或方法。

我很困惑,因为这行得通:

Sheet1.OLEObjects(1).Name

返回名称TempCombo

当我尝试这个时仍然失败:

Sheet1.TempCombo.Clear

返回错误:

运行时错误未指定的错误。

我还应该检查什么?

【问题讨论】:

  • 我想一定是Sheet1.OLEObjects(1).Object.Clear。但Sheet1.TempCombo.Clear 也适用于我而不会引发错误。 Sheet1.TempCombo.List = Array() 是从列表中删除所有项目的另一种方法。 • 我无法重现您的问题。一定有其他原因导致此错误。
  • @Pᴇʜ 你是对的! .Clear 应该确实有效。您是否检查过您的工作表/组合框 -name 是否正确?
  • @J.schmidt 工作表名称必须正确,否则 Sheet1.OLEObjects(1).Name 不会给出正确的名称。因此,ComboBox 名称也是证明。
  • @Pᴇʜ 我发现Sheet1.TempCombo.Clear 将失败,除非属性.ListFillRange = ""。这是其他用户体验过的stackoverflow.com/a/51425477/1903793
  • @PrzemyslawRemin 奇怪它对我有用。但我在测试中从未使用过.ListFillRange。我添加了带有TempCombo.AddItem "test" 的项目。所以感谢您的跟进。

标签: excel vba combobox activex


【解决方案1】:

如果你想清除 ActiveX ComboBox 列表,你可以试试这样的...

Sheet1.OLEObjects(1).ListFillRange = ""

或者更准确地说是这个……

If TypeName(Sheet1.OLEObjects(1).Object) = "ComboBox" Then
    Sheet1.OLEObjects(1).ListFillRange = ""
End If

【讨论】:

  • 这行得通。然而令人惊讶的是Sheet1.OLEObjects(1).Object.ClearSheet1.OLEObjects(1).ListFillRange = "" 之后没有引发错误
  • 嗯,这很有趣!很高兴它按要求工作。请花一点时间通过接受答案将您的问题标记为已解决。
【解决方案2】:

如果组合框有名称,您可以只引用该名称。喜欢

With mySheet
    .cbMyComboBox.ListFillRange = vbNullString
End with

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-11
    • 1970-01-01
    • 2017-06-22
    • 1970-01-01
    • 1970-01-01
    • 2014-05-13
    • 2019-11-27
    相关资源
    最近更新 更多