设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
楼主: roych
打印 上一主题 下一主题

Access挑战Excel第三期:级联菜单

[复制链接]

点击这里给我发消息

1#
发表于 2016-3-23 11:11:19 | 显示全部楼层
动态的问题不大,但乱序的数据有效性不行,要用VBA

点击这里给我发消息

2#
发表于 2016-3-23 16:26:51 | 显示全部楼层
roych 发表于 2016-3-23 12:18
就想挑战下小妖姐姐的极限。
我上传的那个答案还是比较low的。

这两天没空,等有空了就来接招,另外,也欢迎其他会Excel的同学接招,最近Access有点气焰嚣张……

点击这里给我发消息

3#
发表于 2016-3-26 17:07:29 | 显示全部楼层
做了两个:一个是纯函数版,不过函数有限制,所以没有用所有的数据,而且因为在数据验证中无法使用多维引用和内存数组,所以对数据源结构作了些修改。

  1. =OFFSET($E$2,,,COUNTA($E:$E))
  2. =OFFSET($B$1,MATCH($H$3,$A:$A,)-1,,COUNTIF($A:$A,$H$3))
  3. =OFFSET($B$1,MATCH($H$5,$A:$A,)-1,,COUNTIF($A:$A,$H$5))
复制代码



另一个是代码版,这个除了生孩子其他什么都会的代码,就没那么多顾虑了,数据源该是什么样就是什么样。

  1. Private Sub Worksheet_selectionChange(ByVal Target As Range)

  2. Dim MyRow As Long, i As Long
  3. Dim MyStr As String
  4. MyRow = Cells(Rows.Count, 1).End(xlUp).Row

  5. '省
  6. If Target.Address = "$G$4" Then
  7.     For i = 2 To MyRow
  8.         If Application.CountIf(Range("a1:a" & i - 1), Cells(i, 1)) = 0 Then
  9.             MyStr = MyStr & "," & Cells(i, 1)
  10.         End If
  11.     Next
  12.     MyStr = Mid(MyStr, 2, MyRow * 8)
  13.     With Target.Validation
  14.         .Delete
  15.         .Add Type:=xlValidateList, Formula1:=MyStr
  16.     End With
  17. End If

  18. '市
  19. If Target.Address = "$G$6" Then
  20.     For i = 2 To MyRow
  21.         If Cells(i, 1) = Range("g4") Then
  22.             If Application.CountIf(Range("b1:b" & i - 1), Cells(i, 2)) = 0 Then
  23.                 MyStr = MyStr & "," & Cells(i, 2)
  24.             End If
  25.         End If
  26.     Next
  27.     MyStr = Mid(MyStr, 2, MyRow * 8)
  28.     With Target.Validation
  29.         .Delete
  30.         .Add Type:=xlValidateList, Formula1:=MyStr
  31.     End With
  32. End If

  33. '县
  34. If Target.Address = "$G$8" Then
  35.     For i = 2 To MyRow
  36.         If Cells(i, 2) = Range("g6") Then
  37.             If Application.CountIf(Range("c1:c" & i - 1), Cells(i, 3)) = 0 Then
  38.                 MyStr = MyStr & "," & Cells(i, 3)
  39.             End If
  40.         End If
  41.     Next
  42.     MyStr = Mid(MyStr, 2, MyRow * 8)
  43.     With Target.Validation
  44.         .Delete
  45.         .Add Type:=xlValidateList, Formula1:=MyStr
  46.     End With
  47. End If

  48. End Sub

复制代码



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

点击这里给我发消息

4#
发表于 2016-3-26 17:08:31 | 显示全部楼层
那个Roy,我一直没明白Access这个究竟是怎么做的,能扫下盲不?

点击这里给我发消息

5#
发表于 2016-4-10 15:39:08 | 显示全部楼层
Roy,原谅我笨,还是没搞定……
提个小小的要求,能做个视频什么的吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-5-5 13:16 , Processed in 0.088769 second(s), 28 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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