【发布时间】:2020-07-06 10:40:23
【问题描述】:
我尝试做类似的事情:
cmbMyBox.ListFillRange = "E2"
但组合框似乎没有填充。
【问题讨论】:
我尝试做类似的事情:
cmbMyBox.ListFillRange = "E2"
但组合框似乎没有填充。
【问题讨论】:
首先,要尝试从 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))".
你去...
附:当您让动态命名范围发生变化时,您应该使用 VBA 重新设置 .ListFillRange 以便组合框将刷新其列表项。
【讨论】:
There's a problem with this formula. Are you trying to type a formula? 等错误。
好的,我不想再次回答我自己的问题,但是 Excel 组合框上的 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) 并且无法调整。
【讨论】:
我遇到了类似的问题,无法使用从单元格的验证规则中窥视的列表引用填充 ActiveX 组合框。
与 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
【讨论】:
"=INDIRECT(A1)" 等公式。但是如果我将Range 更改为Application.Evaluate,代码就像一个魅力。
或者,我就是这样做的:
定义一个范围名称,其中包括标题行和尾行以及一个要开始的数据行,例如“DataList”
然后使用偏移函数定义以下数据范围名称,不包含头尾记录。
说 "DataRange" = Offset(DataList,1,0,Rows(DataList)-2)
【讨论】:
这在 Excel 2010 上运行良好:
我在“AN”列中有一个项目列表,每周都会更改(变大/变短)。我创建了一个名为“c”的变量,其中包含列表中的项目数。通过使用此变量,组合框(位于单元格 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
【讨论】:
我遇到了类似的问题,我在工作表中有一个 ActiveX 列表框。对我有用的是:
Sheets(1).OLEObjects("ListBox1").ListFillRange = "Sheet2!A1:C20"
ActiveX OLEObjects 非常简单。
【讨论】: