vba动力填充组合框

时间:2012-02-10 00:16:38

标签: excel vba combobox range

这是设置,(所有测试代码)

我在第一张页面上有一个名为“Devmod”的组合框

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

Sub setcomb()

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

这运行正常,但没有用任何数据填充组合框(虽然它确实选择了我想要的正确单元格)

现在我知道我可以创建一个名称范围,然后将其分配给组合框。

但我要做的是当用户点击“更新按钮”时,每个组合框都会使用输入的值进行更新。

从逻辑上讲,这将是

从Device_info工作表中选择单元格范围, 从单元格L3开始,计算出最后使用的单元格。 将这些值分配给组合框。

我可以使用一行或两行代码吗?

干杯

DevilWAH

ANSWER 我的简单函数最终为

    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

感谢agin帮助人们

2 个答案:

答案 0 :(得分:2)

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)

答案 1 :(得分:2)

ListFillRange期望范围地址为字符串。如果要同时选择范围并将其分配给组合框,则必须将其作为两行单独的代码。此外,由于您的单元格范围位于另一个工作表上,因此您需要提供范围的外部地址。 (否则组合框会认为你的意思是它的工作表上的范围。)

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

另一方面,您也可以使用动态命名范围执行此操作。我不记得如何创建一个我的头顶,我会查找并稍后添加。


对于动态命名范围,请在Refers To中输入类似内容。

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

COUNTA函数需要包含您要允许的最大行数。上面的示例创建了一个动态命名范围,最多可以增加300行。正如我可信赖的“ Excel Hacks ”一书所说:

  

在定义COUNTA的范围时,要抵制包含的诱惑   整列数据,因此您不必强制执行COUNTA   可能会计入数千个不必要的细胞。