【问题标题】:Assigning a combobox a named list in vba在vba中为组合框分配一个命名列表
【发布时间】:2017-03-21 21:46:10
【问题描述】:

我正在尝试根据特定组合框的值为每个组合框动态分配一个列表。这个想法是用户从特定组合框中选择一个类别,所有其他组合框以命名列表的形式从该类别中获取项目。

所以结构是这样的

类别

第 1 类

第 2 类

类别 1

项目 1 第 2 项

等等。我在一组假名称上进行了这项工作,但现在我使用的是真实命名范围,代码中断了。它打破了“For Each rng In ws.Range(str)”,并指出“对象 '_worksheet' 的方法 'range' 失败。

此代码有效。或者工作。然后我将 ws 更改为指向不同的命名范围表,现在没有任何效果。

CBOCategory 的值是所有命名范围列表中的任何值,但 Excel 似乎没有看到它们中的任何一个!我什至尝试触发 listfill 分配而不是添加每个项目并得到类似的错误

    Private Sub CBOCategory_Change()
      'Populate dependent combo box with appropriate list items
      'according to selection in cboCategoryList.
      Dim rng As Range
      Dim ws As Worksheet
      Dim str, temp, cbName As String
      Dim counter As Integer
      Set ws = Worksheets("Item Master")


    Dim obj As OLEObject
    str = CBOCategory.Value

    For Each obj In ActiveSheet.OLEObjects
        If obj.Name = "CBOCategory" Then
            ' nothing
        Else
            temp = obj.Object.Value
            obj.Object.Value = ""
            For Each rng In ws.Range(str)
                obj.Object.AddItem rng.Value
            Next rng
            obj.Object.Value = temp
        End If
        'MsgBox ("updated!")
    Next obj



    End Sub

【问题讨论】:

  • 虽然我怀疑它会导致错误,但您确实应该将str 声明为String,而不是让它默认为Variant,即Dim str As String, temp As String, cbName As String
  • 要添加到@YowE3K 的评论中,这有点不直观,但Dim str, temp, cbName as String 确实将所有这些声明为String,它仅将cbName 声明为@ 987654329@,其他为Variant,这是未指定类型时的默认值。
  • 您的命名范围的范围是什么?如果它们仅适用于特定工作表,ws 必须是该工作表
  • 所有命名范围都存在于 ws / 名为“Item Master”的工作表中。命名范围设置为列的整个高度(以便在添加时可以扩展),使用以下格式 =OFFSET(Item Master!$AR$2,0,0,COUNTA(Item Master!$ AR:$AR)-1,1) 在这种情况下,AR 是命名范围所在的列。
  • 试过For Each rng In ws.Range(str).Cells?在 For 循环之前,您在 Debug.Print str 的即时窗口中得到了什么?确保不是""

标签: vba excel combobox


【解决方案1】:

代码运行良好。问题的根本原因是命名范围是由公式动态设置的。代码运行时公式计算不正确,因此 vba 无法使用动态设置的命名范围来查找另一个动态设置的命名范围。

解决方案是显式设置命名范围。然后代码就可以正常工作了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-29
    • 2022-11-11
    • 2016-09-25
    • 2021-03-18
    相关资源
    最近更新 更多