我尝试过这样的事情:
cmbMyBox.ListFillRange = "E2"
但是这个组合框似乎没有填充。
答案 0 :(得分:11)
首先,要尝试从VBA设置listfillrange,您需要包含'='符号,如下所示:
combobox.ListFillRange = "=E3:E13"
而不是combobox.ListFillRange = "E3:E13"
,这不起作用。
您可以拥有动态命名范围,例如:
listItems: "=Sheet1!$A$1:INDEX(Sheet1!$A:$A;COUNTA(Sheet1!$A:$A))"
使用VBA设置ListFillRange,如下所示:combobox.ListFillRange = "=listItems"
再次,使用'='
标志!!
此动态范围listItems会动态增长/缩小,具体取决于A列中的值。
我知道我回答的确很晚,但我注意到很多人认为命名范围总是必须修复,而它们也可以是动态的......
你是怎么做到的?
在Excel 2007及更高版本中,您转到功能区选项卡"Formulas"
并单击“名称管理器”按钮
您可以在此管理所有已定义的命名范围,而不是选择单元格并在左上方框中为其指定名称。
创建一个新的,并给它值(不带引号):
"=Sheet1!$A$1:INDEX(Sheet1!$A:$A;COUNTA(Sheet1!$A:$A))"
。
你去......
P.S。当您让动态命名范围更改时,您应该使用VBA重新设置.ListFillRange,以便组合框将刷新其列表项。
答案 1 :(得分:2)
好的,不要故意再次回答我自己的问题,但是这个用于Excel的combobox上的ListFillRange属性绝对令人抓狂。这是我实施的最终代码。
Sheet1.Range("E3").CurrentRegion.Select
Dim example as Range
Set example = Selection
With cmbMyBox
.ListFillRange = example.Address(0, 0, x1A1, True)
End With
这里遇到的麻烦是我试图使用动态范围动态设置组合框,动态范围根据用户输入的值给出而变化。据我所知,我无法使用命名范围,因为命名范围是固定的,例如(A3:Z20),无法调整。
答案 2 :(得分:1)
Private Sub ComboBox1_Change()
Me.ComboBox2.ListFillRange = "=" & ComboBox1.Value
End Sub
这也有效。但是你必须使用已经建议的索引和counta来定义名称,或者你可以在表格中引用它们两次。我的意思是,让你的数据成为一个表。从Combobox1中引用您想要的列作为选项的标题,并在名称中添加一个,例如Fruits1,然后定义引用 Fruits1 的辅助命名范围,称为 Fruits 即可。 Fruits Fruits1
答案 3 :(得分:1)
我遇到了类似的问题,无法使用从单元格验证规则中查看的列表引用来填充ActiveX ComboBox。
与Firedrawndagger自己的解决方案类似,我将验证规则手动转换为.ListFillRange理解的格式。 我还意识到,它需要采用工作簿范围格式,否则调用将无法在其他工作表中使用。
这适用于所有验证源格式,包括:$ A $ 1 / = NamedRange / = INDIRECT(" Table1 [Col2]") 翻译是:
Dim xStr As String
xStr = Target.Validation.Formula1
xStr = Right(xStr, Len(xStr) - 1)
xStr = Split(Range(xStr).Address(, , , True), "]")(1)
'...other irrelevant code
.ListFillRange = xStr
答案 4 :(得分:0)
或者,我就是这样做的:
定义一个范围名称,其中包括标题和尾部行以及一个要开始的数据行,例如" DataList"
然后使用偏移函数定义以下数据范围名称sans the header和trailer记录。
说" DataRange" = Offset(DataList,1,0,Rows(DataList)-2)
答案 5 :(得分:0)
这在Excel 2010上运行正常:
我在列#34; AN"中有一个项目列表每周都会变化(变大/变短)。我创建了一个名为" c"的变量。其中包含列表中的项目数。通过使用此变量,ComboBox(位于单元格S7:U7上)现在将以幻想方式显示列表中实际包含的项目(组合框中没有空格或缺少项目)。
代码:
Dim rng As Range
Set rng = ActiveSheet.Range("S7:U7")
ActiveSheet.DropDowns.Add(rng.Left, rng.Top, rng.Width, rng.Height).Select
With Selection
.ListFillRange = "AN1:AN" & c
.LinkedCell = "$V$7"
.DropDownLines = 8
.Display3DShading = False
End With
答案 6 :(得分:0)
我有一个类似的问题,我在工作表中有一个ActiveX列表框。对我有用的是:
Sheets(1).OLEObjects("ListBox1").ListFillRange = "Sheet2!A1:C20"
ActiveX OLEObject非常简单。