确保分配RowSource不会失败

我有2个combobox,我使用RowSource填充。
Combobox2 RowSource根据Combobox1的值更改。

我有这个代码:

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

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

问题:
这工作正常,如果只打开工作簿是包含此代码的工作簿。
但是,如果另一个工作簿已打开,则无法正确引用RowSource
我怎样才能改善这个?

您可以使用combobox的List属性,如下所示:

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

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

旧的post我知道,但当我试图找出RowSource函数(当它从一列中获取数据时有点奇怪地称它为RowSource)的时候遇到了它。

任何人,我已经玩了一下,并相信下面简化它,节省你不得不记得什么时候所有的引号,感叹号和括号。

 If Combobox1.Value = "Item1" Then Combobox2.RowSource = ThisWorkbook.Names("Item1").RefersTo 

或者,如果你不使用命名的范围:

 If Combobox1.Value = "Item1" Then Combobox2.RowSource = ThisWorkbook.Worksheets("Sheet1").Range("A1:A5").Address 

为了改善这一点,请包含包含RowSource的工作簿的Filename ,如下所示:

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

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

 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"