我试着这样做:
cmbMyBox.ListFillRange = "E2"
但combobox似乎并没有普及。
发布于 2010-11-17 09:59:46
好吧,我不想再一次回答我自己的问题,但是在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),不能调整。
发布于 2012-06-11 21:23:07
首先,为了尝试从VBA设置列表范围,您需要包括'=‘符号,如下所示:
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列中的值动态地增长/缩小。
我知道我回答得太晚了,但我注意到很多人认为命名范围总是需要固定的,而它们也可以是动态的……
您如何做到这一点?在Excel2007和更高版本中,您可以转到功能区选项卡"Formulas"
并单击按钮“名称管理器”,而不是选择单元格并在左上角的框中为它们指定名称,您可以在此管理所有已定义的命名区域。创建一个新的,并给它赋值(不带引号):
"=Sheet1!$A$1:INDEX(Sheet1!$A:$A;COUNTA(Sheet1!$A:$A))"
。
给你..。
备注:当您让动态命名范围更改时,您应该使用VBA重新设置.ListFillRange,以便组合框将刷新其列表项。
发布于 2018-02-15 17:47:42
我也遇到过类似的问题,无法使用从单元格的验证规则中窥视到的列表引用来填充ActiveX ComboBox。
与Firedrawndagger自己的解决方案类似,我选择了手动将验证规则转换为.ListFillRange能够理解的格式。我还意识到,它需要是工作簿范围的格式,否则调用将不能从其他工作表中工作。
这适用于所有验证源格式,包括:$A$1 / =NamedRange / =INDIRECT("Table1Col2")转换为:
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
https://stackoverflow.com/questions/4200712
复制相似问题