确保分配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"