VBA Range.Name损坏了吗?

时间:2018-11-14 04:27:56

标签: excel vba excel-vba

因此,我正在运行一个VBA应用程序,该应用程序将一个关联的单元格查找为一个值,从中创建一个范围,然后通过将该范围与名称相关联来填充数据验证下拉列表。

这允许我通过执行以下操作来创建动态填充的下拉列表填充:

  1. 更改事件导致代码触发

  2. 然后在另一张纸上扫描用户输入的值

  3. 找到此值后,该行上的单元格将添加到范围对象

  4. 此范围对象从下拉列表所在的单元格中获取使用信息分配的Range.Name属性。

  5. 这在旧版的excel中有效

曾经发生的事情->名称:LotnumbersF3 ==创建名称验证列表源=无-运行代码-build range -assign range.name = LotnumbersF3 -Drop Down列表填充范围信息

现在会发生什么-> range.Name =没有运行代码range.Name =“ LotnumbersF3” //我的代码执行此//检查名称范围的值。Name=“ = sheet!$ D $ 7,sheet!$ D $ 21 ...

我需要名称等于一个特定值,为什么要更改它?

编辑:

下面是与工作表上已经创建的名称相关联的代码:

ListNamePostFix = Replace(Target.Offset(0, 1).AddressLocal, "$", "")

因此,现在我运行一个匹配的算法,该算法利用多达三个潜在的唯一键来描述不同的下拉列表关联。一些列表取决于在其他下拉列表中选择的值:

For Each RngCell In WorkingRng
    If ThreeArgs Then
        If Target.Offset(0, -7).Value = RngCell.Value _
        And Target.Offset(0, -2).Value = RngCell.Offset(0, 2).Value _
        And Target.Value = RngCell.Offset(0, 1).Value Then
            If Not NamedRng Is Nothing Then
                Set NamedRng = Union(NamedRng, ASP.Cells(Index, Column))
            Else
                Set NamedRng = ASP.Cells(Index, Column)
            End If
        End If
        Index = Index + 1
    ElseIf TwoArgs Then
        If Target.Offset(0, -5).Value = RngCell.Value And Target.Value = RngCell.Offset(0, 2).Value Then
            If Not NamedRng Is Nothing Then
                Set NamedRng = Union(NamedRng, ASP.Cells(Index, Column))
            Else
                Set NamedRng = ASP.Cells(Index, Column)
            End If
        End If
        Index = Index + 1
    Else
        If RngCell.Value = Target.Value Then
            If Not NamedRng Is Nothing Then
                Set NamedRng = Union(NamedRng, ASP.Cells(Index, Column))
            Else
            'innitializes the range object with first match.
                Set NamedRng = ASP.Cells(Index, Column)
            End If
        End If
        Index = Index + 1
    End If
Next

此函数在此之前被调用:

 If Not NamedRng Is Nothing Then
        ListName = ListName & ListNamePostFix
        NamedRng.Name = "LOTNUMBERS"
    Else
        Set NamedRng = Cells(1, 1)
        ListName = "LOTNUMBERS" & ListNamePostFix
        NamedRng.Name = ListName
    End If

在较旧的版本中,不确定哪个版本的excel可以正常工作。但是现在,根据提供的奇妙答案,我们看到Name对象不再与字符串关联,而是将范围元素的某些不合逻辑的合并添加到了工作范围中。为什么!!!!! ????

0 个答案:

没有答案