Private Sub worksheet_SelectionChange(ByVal Target As Range)
'启用EXCEL宏使用的环境,具体方法可问
度娘;
'按ALT+F11打开VBE编辑器,找到左侧VBAproject工程树下方的(sheet2)表;
'双击该表,将代码粘贴进表右侧代码窗,保存。
'文件另存为.XLSM或.xls格式
Dim d, iRow%, i%
Set d = CreateObject("scripting.dictionary")
arr = Sheets("Sheet1").Range("D2").CurrentRegion '表1食物清单,表首在D2
'***********************事件触发设置****************************
'所选单元格数量只能是1个
If Target.Rows.Count * Target.Columns.Count > 1 Then Exit Sub
'所选单元格内容非空
If Len(Target) = 0 Then Exit Sub
'所选单元格位于F列
Set Rng = Intersect(Target, Columns("F:F"))
If Rng Is Nothing Then Exit Sub
'删除所选单元格中存在的有效性设置(初始化)
Target.Validation.Delete
'将表1的D列食物清单中包含F列所选单元格的文字的不重复项写入字典
For i = 2 To UBound(arr)
If InStr(arr(i, 1), Target) Then
If Not d.exists(arr(i, 1)) Then
d(arr(i, 1)) = ""
End If
End If
Next i
'***********************有效性设置******************************
If d.Count > 0 Then
With Target.Validation
.Add 3, 1, 1, Formula1:=Join(d.keys, ",")
.IMEMode = xlIMEModeNoControl
.ErrorMessage = "" '取消错误提示
.ShowError = False '取消错误提示
End With
End If
d.RemoveAll:Set d = Nothing
End Sub
追问谢谢你的回答,我试了下在运行时出现了错误提示,是什么原因呢
![](https://video.ask-data.xyz/img.php?b=https://iknow-pic.cdn.bcebos.com/4034970a304e251f63396099b786c9177e3e5381?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_600%2Ch_800%2Climit_1%2Fquality%2Cq_85%2Fformat%2Cf_auto)
追答首先检查下IE浏览器下关于ACTIVEX的设置,选择“Internet选项”-“本地Internet”-“自定义”-在“安全设置”下找到,ACTIVEX相关项并启用。
第1步设置后若继续无效,则电脑可能缺少相应的dll文件。可以根据操作系统结合“ACTIVEX 429错误”在网上下载相应DLL或对DLL重新注册,最好让网管或懂电脑的帮助处理下,这个几句话解释不了。但千万不要去重装系统。
本回答被网友采纳