确保分配RowSource不会失败

时间:2013-11-19 03:02:24

标签: excel vba excel-vba

我有2个ComboBoxes,我使用RowSource填充 Combobox2 RowSource根据Combobox1的值而变化。

我有这段代码:

If Combobox1.Value = "Item1" Then Combobox2.RowSource = "Sheet1!Item1"

Sheet1是工作表的名称,Item1是命名范围。

问题:
如果打开的唯一工作簿是包含此代码的工作簿,则此工作正常 但是,如果另一个工作簿已打开,则无法正确引用RowSource 我该如何改进呢?

2 个答案:

答案 0 :(得分:2)

您可以使用组合框的List属性,例如:

If Combobox1.Value = "Item1" Then 
    Me.ComboBox2.List = Application.WorksheetFunction.Transpose(Workbooks("test").Worksheets("Sheet1").Range("Item1"))
End If

Application.Transpose需要将范围转换为一维数组。

答案 1 :(得分:0)

要改进此功能,请包含包含 RowSource 的工作簿的Filename,如下所示:

If ComboBox1.Value = "Item1" Then ComboBox2.RowSource = "'[Test.xlsm]Sheet1'!Item1"

或者更好地通过声明变量来改进它:

Dim wb As Workbook, ws As Worksheet

Set wb = Thisworkbook
Set ws = wb.Sheets("Sheet1")

If ComboBox1.Value = "Item1" Then _
   ComboBox2.RowSource = "'[" & wb.Name & "]" & ws.name & "'!" & "Item1"