【问题标题】:Ensure that assigning RowSource will not fail确保分配 RowSource 不会失败
【发布时间】:2015-07-16 06:05:23
【问题描述】:

我有 2 个组合框,我使用 RowSource 填充它们。
Combobox2 RowSource 根据 Combobox1 的值变化。

我有这个代码:

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

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

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

【问题讨论】:

    标签: vba excel


    【解决方案1】:

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

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

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

    【讨论】:

    • 奇怪的是,上个月我看到你回答了一个非常相似的问题,答案非常相似:stackoverflow.com/a/19107555/293078
    • 实际上,这是关于从Range 添加Combobox List,它们是列标题(水平)。但是我从您的帖子中了解到,我需要在RowSource 参考中添加Workbook Name。我会试试的,我会回复你的。 :)
    • 是的,像 Combobox2.RowSource = "'[Test.xlsm]Sheet1'!Item1" 这样添加工作簿名称可以工作。 :)
    【解决方案2】:

    我知道的旧帖子,但我在尝试找出 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
    

    【讨论】:

    • 这是正确的,但我不会使用RefersTo,而是使用:ThisWorkbook.Names("Item1").RefersToRange.Address(, , , True),它将为您提供带有工作簿和工作表名称的完全限定范围地址。如果你使用普通的 Range,也是如此。
    【解决方案3】:

    要改进这一点,请包含包含 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"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-11
      • 1970-01-01
      • 1970-01-01
      • 2020-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-19
      相关资源
      最近更新 更多