【问题标题】:Dynamic Range and one static Item to a ComboBox via VBA动态范围和一个静态项目通过 VBA 到 ComboBox
【发布时间】:2017-05-05 17:54:20
【问题描述】:

我有这个代码:

With Sheet1.Shapes("comboBox1").ControlFormat
    .ListFillRange = "namedRange"
    .AddItem "1.Item"
End With

但在那之后,我的Combo-Box 中只有“1.Item”,动态范围根本没有出现。

如何将一个 Item 和我的Range 添加到Combo-Box


编辑

如果我删除.AddItem,动态range 将起作用:

With Sheet1.Shapes("comboBox1").ControlFormat
    .ListFillRange = "namedRange"
End With

我的问题是是否有可能将它们组合在一起,使其不在一个范围内,而是彼此分开。


非常感谢您的回答...

【问题讨论】:

  • 为什么不将额外的项目添加到您的范围内?
  • 这也是我的想法,但我想知道我的第一次尝试是否有更好的方法。而且我不能将它添加到我当前的范围,因为我使用这个范围不仅仅是那个组合框。所以我需要做一个新的范围......这将是(有点)没用......
  • @holyFackel 您的 ComboBox 是 User_Form 类型吗?或ActiveX ?
  • @ShaiRado 一个 User_Form ...
  • 但放在一张纸上?或在user_form 内?

标签: vba excel dynamic combobox


【解决方案1】:

如果我正确理解了您的帖子,您希望在“namedRange”中的项目中添加另一个项目,并在工作表 ComboBox(实际上是工作表中的下拉菜单)中显示所有这些项目。

(将“Sheet2”修改为您的工作表名称)。

Sub PopulateCombo_fromArray()

Dim ComboArray As Variant

'clear Combo-Box from previous runs >> modify "Sheet2" to your sheet's name
Worksheets("Sheet2").Shapes("ComboBox1").ControlFormat.RemoveAllItems

' reading the NamedRange into a 1-dimension array
ComboArray = Application.Transpose(Range("namedRange").Value)

ReDim Preserve ComboArray(UBound(ComboArray))
' add another element to the array (outside the "namedRange")
ComboArray(UBound(ComboArray)) = "1.Item"

' populate "ComboBox1" with array
Worksheets("Sheet2").Shapes("comboBox1").ControlFormat.List = ComboArray

End Sub

【讨论】:

  • 如何将“1.Item”设置为 ListIndex 1
  • @holyFackel 你是什么意思?你想用“1.Item”做什么?
【解决方案2】:

你必须使用“形状”吗?

如果没有,您可以使用这样的命名范围填充组合框:

With Sheet1.ComboBox1
    .List = Application.Transpose(Range("namedRange"))
    .AddItem "1.Item"
End With

【讨论】:

  • 是的,第一步是将范围挖掘到一个变体数组中,然后为额外的元素重新调整数组的大小,填充额外的项目并用作列表源。
猜你喜欢
  • 1970-01-01
  • 2011-03-06
  • 1970-01-01
  • 1970-01-01
  • 2021-10-02
  • 2016-08-30
  • 1970-01-01
  • 2018-07-12
相关资源
最近更新 更多