因此,我正在运行一个VBA应用程序,该应用程序将一个关联的单元格查找为一个值,从中创建一个范围,然后通过将该范围与名称相关联来填充数据验证下拉列表。
这允许我通过执行以下操作来创建动态填充的下拉列表填充:
更改事件导致代码触发
然后在另一张纸上扫描用户输入的值
找到此值后,该行上的单元格将添加到范围对象
此范围对象从下拉列表所在的单元格中获取使用信息分配的Range.Name属性。
这在旧版的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对象不再与字符串关联,而是将范围元素的某些不合逻辑的合并添加到了工作范围中。为什么!!!!! ????