【发布时间】:2021-06-01 13:14:38
【问题描述】:
我正在尝试让一个单元格自动将其第一个值添加到该单元格的数据验证下拉列表中。还没有在网上找到任何似乎有效的东西。
当用户从工作簿的其他部分输入信息时,此 Sub 被 Private Sub 激活。
我已经剪掉了应该选择第一个下拉值并将其添加到单元格的代码部分,但事实并非如此。 .Value = 1 对我来说似乎不合适...... 我也无法列出此下拉列表将从中选择的范围,因为这将是动态的。我见过多个使用“with”语句的示例,但似乎它们需要此列表的工作范围才能操作。
我应该提到单元格“LastProject”已经包含一个下拉列表。
谁有更好的主意?
Dim LastProject As Range
Set LastProject = FoundBMR.Offset(0, 1)
'''Find Last Project Produced for unit
''' Function ListSourceRange Required.
Dim rngSource As Range
rngSource = LastProject
Set rngSource = ListSourceRange(Target)
If Not rngSource Is Nothing Then
rngSource.Parent.Activate
End If
With LastProject
.ClearContents
.Validation.Delete
.Validation.Add Type:=xlValidateList, Formula1:="+" & rngSource
.Value = rngSource.Cells(1, 1).Value
End With
Function ListSourceRange(c As Range) As Range
Dim vType, rng As Range
On Error Resume Next 'ignore error if no validation
vType = c.Validation.Type
On Error GoTo 0 'stop ignoring errors
If vType = 3 Then
'try to get a source range...
On Error Resume Next
Set rng = Range(c.Validation.Formula1)
On Error GoTo 0
End If
Set ListSourceRange = rng 'source range, or Nothing if no range found
End Function
【问题讨论】:
-
您的下拉菜单是真正的数据验证>>列表,还是其他类型的实现?
DropDowns与数据验证无关 - 这些将是从开发人员功能区选项卡添加的表单控件。 -
如果你想从列表源范围中选择第一个值,那么你可以使用这样的东西:stackoverflow.com/questions/66323724/…
-
@TimWilliams 和 kevin9999 天才思维!这真是个好主意。但是,我收到一个编译错误:Set rngSource = ListSourceRange(Target) 上的 ByRef 参数类型不匹配。不知道为什么会这样。我已经修改了原始帖子中的代码,因为我在 cmets 中遇到了问题。