我是新手,感谢您的耐心等待。我在一张纸上有一长串案例编号和相关名称,每个案例编号有几个名称。在工作簿的各个位置,我希望用户从下拉列表中选择一个案例编号(可以使用动态命名范围),然后在另一个下拉列表中选择一个关联名称。
因为案例编号太多,而且它们会发生变化,所以我不能在第二个下拉列表中使用命名范围。有没有一种 VBA 方法可以做到这一点?
我是新手,感谢您的耐心等待。我在一张纸上有一长串案例编号和相关名称,每个案例编号有几个名称。在工作簿的各个位置,我希望用户从下拉列表中选择一个案例编号(可以使用动态命名范围),然后在另一个下拉列表中选择一个关联名称。
因为案例编号太多,而且它们会发生变化,所以我不能在第二个下拉列表中使用命名范围。有没有一种 VBA 方法可以做到这一点?
假设您的案例编号位于 Sheet2 的第 1 行,其关联名称位于每个案例编号下方,您的案例编号下拉列表位于单元格中B1
,并且您的关联名称下拉列表位于单元格中B2
(定义为列表 ListNames 的数据验证),请使用以下工作表更新数据验证的宏B2
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rgNames As Range, rgFoundCase As Range
If Not Intersect(Target, [B1]) Is Nothing Then
'turn off updates to speed up code execution
With Application
.ScreenUpdating = False
.EnableEvents = False
.Calculation = xlCalculationManual
.DisplayAlerts = False
End With
Set rgFoundCase = Sheets("Sheet2").Rows(1).Find(What:=[B1], After:=Sheets("Sheet2").Cells(1, 1), LookIn:=xlFormulas, LookAt _
:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False, SearchFormat:=False)
Set rgNames = rgFoundCase.Offset(1).Resize(rgFoundCase.End(xlDown).Row - 1)
ActiveWorkbook.Names.Add Name:="ListNames", RefersTo:=rgNames
With Application
.ScreenUpdating = True
.EnableEvents = True
.Calculation = xlCalculationAutomatic
.DisplayAlerts = True
End With
End If
End Sub