Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 1730|回复: 9

[已解决]数据有效性的代码求助大神帮助

[复制链接]
发表于 2017-10-27 16:08 | 显示全部楼层 |阅读模式
在sheet1的A5~A15中的对象作为下拉菜单的选项当sheet1中F20=1时,在sheet3的e3单元格显示下拉菜单

当sheet1中F20不为1时,在sheet3的e3单元格为sheet1中B20
最佳答案
2017-10-27 16:42
见附件,更改sheet1的F20单元格后生效。

求助.zip

6.49 KB, 下载次数: 4

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2017-10-27 16:25 | 显示全部楼层
  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2. If Target.Count > 1 Then Exit Sub
  3. If Target.Address <> [f20].Address Then Exit Sub
  4. With Sheets(2).[e3].Validation
  5.   .Delete
  6.   If Target = 1 Then
  7.     Dim arr, s$, i&
  8.     arr = [a5].CurrentRegion
  9.     For i = 1 To UBound(arr)
  10.       s = s & "," & arr(i, 1)
  11.     Next i
  12.     .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:=Mid(s, 2)
  13.   Else
  14.     Sheets(2).[e3] = [b20]
  15.   End If
  16. End With
  17. End Sub
复制代码
回复

使用道具 举报

 楼主| 发表于 2017-10-27 16:36 | 显示全部楼层
本帖最后由 913852310 于 2017-10-27 16:41 编辑

大神,怎么我没有调试出来?传个附件给我吧,我是小白
回复

使用道具 举报

发表于 2017-10-27 16:42 | 显示全部楼层    本楼为最佳答案   
见附件,更改sheet1的F20单元格后生效。

test.zip

12.86 KB, 下载次数: 10

回复

使用道具 举报

 楼主| 发表于 2017-10-27 16:45 | 显示全部楼层
本帖最后由 913852310 于 2017-10-27 16:47 编辑
大灰狼1976 发表于 2017-10-27 16:42
见附件,更改sheet1的F20单元格后生效。

OK了,大神,谢谢你了!十分感谢
回复

使用道具 举报

 楼主| 发表于 2017-10-27 17:38 | 显示全部楼层
本帖最后由 913852310 于 2017-10-27 19:34 编辑
大灰狼1976 发表于 2017-10-27 16:42
见附件,更改sheet1的F20单元格后生效。

大神,怎么限制一下。下拉菜单只在A5~A15中选,还有一个问题就是:当f20是从其他单元格引用的时候,每次要点一下f20单元格才能实现,能不能点sheet3中的e3就启动一次?
回复

使用道具 举报

发表于 2017-10-28 09:17 | 显示全部楼层
可以实现的,见附件。
不过有点小问题,选择E3单元格时,删不掉原来的数据有效性列表,所以用了变通的方法。

test.zip

14.37 KB, 下载次数: 6

回复

使用道具 举报

 楼主| 发表于 2017-10-28 09:24 | 显示全部楼层
大灰狼1976 发表于 2017-10-28 09:17
可以实现的,见附件。
不过有点小问题,选择E3单元格时,删不掉原来的数据有效性列表,所以用了变通的方法 ...

大神,A5~A15怎么才能限定呢?就是当A5上面有值的时候也会录入到下拉菜单中,A1~A20有值的时候全都会录入到下拉菜单中。我只想在A5到A15中选


回复

使用道具 举报

发表于 2017-10-28 11:31 | 显示全部楼层
  1. Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  2. If Target.Count > 1 Then Exit Sub
  3. If Target.Address <> [e3].Address Then Exit Sub
  4. With Target.Validation
  5.   .Delete
  6.   If Sheets(1).[f20] = 1 Then
  7.     Dim arr, s$, i&
  8.     arr = Sheets(1).[a5:a15]
  9.     For i = 1 To UBound(arr)
  10.       If arr(i, 1) = "" Then Exit For
  11.       s = s & "," & arr(i, 1)
  12.     Next i
  13.     Target = ""
  14.     .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:=Mid(s, 2)
  15.   Else
  16.     Target = Sheets(1).[b20]
  17.     .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:=Target
  18.   End If
  19. End With
  20. End Sub
复制代码
回复

使用道具 举报

 楼主| 发表于 2017-10-28 12:33 | 显示全部楼层

非常感谢大神,完全满足我的要求!谢谢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-6 18:06 , Processed in 0.540429 second(s), 11 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表