VBA动力填充combobox

这里是设置,(所有testing代码)

我在名为“Devmod”的工作表上有一个combobox,

我创build了一个名为testing的模块,并在其中创build了以下子模块

Sub setcomb() Sheet1.Devmod.ListFillRange = Range(Sheets("Device_info").Range("l3"), _ Sheets("Device_info").Range("l3").End(xlDown)).Select End Sub 

这运行正常,但不填充任何数据的combobox(虽然它确实select我想要的正确的单元格)

现在我知道我可以做这个创build一个名称范围,然后将其分配给combobox。

但我想要做的是当用户点击一个“更新button”每个combobox更新input的值。

从逻辑上讲,这将是

从Device_info工作表中select单元格的范围,单元格L3处开始并计算出最后使用的单元格。 将这些值分配给combobox。

我可以用一行或两行代码来做到这一点吗?

干杯

DevilWAH

回答我的简单function结束了

  Function setcomblist(wsheet As String, startrng As String, Optional endrng As Variant) 'used to populate comboboxes from a dynamic lenth range taking named sheet and starting cell as argument. 'use: combobox.ListFillRange = setcombolist("sheetname", "startcell") If IsMissing(endrng) Then setcomblist = Range(Sheets(wsheet).Range(startrng), Sheets(wsheet).Range(startrng).End(xlDown)).Address(External:=True) Else setcomblist = Range(Sheets(wsheet).Range(startrng), Sheets(wsheet).Range(endrng)).Address(External:=True) End If End Function 

感谢帮助人

ListFillRange期望一个范围地址作为一个string。 如果要同时select范围并将其分配给combobox,则必须将其作为两行单独的代码来执行。 此外,因为您的单元格范围在另一个工作表上,所以您需要给出该范围的外部地址。 (否则combobox会认为你的意思是工作表上的范围。)

 Sheet1.Devmod.ListFillRange = Range(Sheets("Device_info").Range("l3"), _ Sheets("Device_info").Range("l3").End(xlDown)).Address(External:=True) 

为了清楚起见,我会重写它如下。

 Sub setcomb() Dim rng as Range Set rng = Sheets("Device_info").Range("L3") Sheet1.Devmod.ListFillRange = Range(rng, rng.End(xlDown)).Address(External:=True) End Sub 

另一方面,您也可以使用dynamic命名范围来完成此操作。 我不记得如何创造一个我的头顶,我会查找并稍后添加它。


对于一个dynamic的命名范围,在Refers Toinput这样的内容。

=OFFSET(Device_info!$L$3,0,0,COUNTA(Device_info!$L$3:$L$303),1)

COUNTA函数需要包含要允许的最大行数。 上面的例子创build一个dynamic的命名范围,最多可以增长到300行。 正如我可信的“ Excel Hacks ”一书所说:

在定义COUNTA的范围时,请避免包含整列数据的诱惑,以免强制COUNTA函数计算数千个不必要的单元。

 Dim rngList as range With Sheets("Device_info") Set rngList = .Range(.Range("l3"),.Range("l3").End(xlDown)) End With Sheet1.Devmod.ListFillRange = rngList.Address(,,,true)