Excel精英培训网

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

[已解决]VBA信息调用问题

[复制链接]
发表于 2016-6-8 16:08 | 显示全部楼层 |阅读模式
本帖最后由 龙送农 于 2016-6-8 22:42 编辑

通过单元格D3选择单位,不用点击按钮,直接调出所要信息(里面的代码调出信息不准确[size=14.6667px]。当D3选择单位是“全县”时,调出所有信息。
fjmxwrs老师的解答:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$D$2" Then
        Dim arr, str1$, brr(), x%, i%, y%, r%
        With Sheet1
            r = .Range("B65536").End(xlUp).Row
            arr = .Range("A5:AU" & r)
        End With
        str1 = Target.Value
        If str1 = "全部" Then
            For x = 1 To UBound(arr)
                i = i + 1
                ReDim Preserve brr(1 To 31, 1 To i)
                brr(1, i) = i
                For y = 2 To 6
                    brr(y, i) = arr(x, y)
                Next y
                For y = 8 To 11
                    brr(y - 1, i) = arr(x, y)
                Next y
                brr(11, i) = arr(x, 13)
                brr(12, i) = arr(x, 15)
                For y = 17 To 26
                    brr(y - 4, i) = arr(x, y)
                Next y
                For y = 30 To 37
                    brr(y - 7, i) = arr(x, y)
                Next y
                brr(31, i) = arr(x, 47)
            Next x
        Else
            For x = 1 To UBound(arr)
                If arr(x, 3) = str1 Then
                    i = i + 1
                    ReDim Preserve brr(1 To 31, 1 To i)
                    brr(1, i) = i
                    For y = 2 To 6
                        brr(y, i) = arr(x, y)
                    Next y
                    For y = 8 To 11
                        brr(y - 1, i) = arr(x, y)
                    Next y
                    brr(11, i) = arr(x, 13)
                    brr(12, i) = arr(x, 15)
                    For y = 17 To 26
                        brr(y - 4, i) = arr(x, y)
                    Next y
                    For y = 30 To 37
                        brr(y - 7, i) = arr(x, y)
                    Next y
                    brr(31, i) = arr(x, 47)
                End If
            Next x
        End If
        Application.EnableEvents = False
        Application.ScreenUpdating = False
        Range("A5:AE10000").ClearContents
        Range("A5").Resize(UBound(brr, 2), UBound(brr)) = Application.Transpose(brr)
        Erase arr, brr
        Application.ScreenUpdating = True
        Application.EnableEvents = True
    End If
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Address = "$D$2:$H$2" Then
        Dim d As Object, arr, x%, str1$
        Set d = CreateObject("scripting.dictionary")
        With Sheet1
            r = .Range("B65536").End(xlUp).Row
            arr = .Range("A5:AU" & r)
        End With
        For x = 1 To UBound(arr)
            d(arr(x, 3)) = ""
        Next x
        str1 = Join(d.keys, ",") & ",全部"
        With Target.Validation
            .Delete
            .Add Type:=xlValidateList, Formula1:=str1
        End With
        d.RemoveAll
        Erase arr
    End If
End Sub



最佳答案
2016-6-8 21:10
本帖最后由 02761752696 于 2016-6-10 14:39 编辑
龙送农 发表于 2016-6-8 19:39
老师:麻烦您帮再修改代码,如果一个单位人员名单在“数据库”不连续时,出现图片这样情况。

这是你的原代码的问题,之前没注意

VBA信息调用问题0.rar

15.45 KB, 下载次数: 11

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2016-6-8 17:18 | 显示全部楼层
回复

使用道具 举报

发表于 2016-6-8 17:29 | 显示全部楼层
本帖最后由 02761752696 于 2016-6-10 14:39 编辑

............这样吗[url=]删除[/url]
zz.gif

VBA信息调用问题0608.rar

104 KB, 下载次数: 18

回复

使用道具 举报

 楼主| 发表于 2016-6-8 19:39 | 显示全部楼层
02761752696 发表于 2016-6-8 17:29
............这样吗

老师:麻烦您帮再修改代码,如果一个单位人员名单在“数据库”不连续时,出现图片这样情况。
S(X})7O~@X6{}_S~6$EG$V6.png
回复

使用道具 举报

发表于 2016-6-8 20:29 | 显示全部楼层
本帖最后由 fjmxwrs 于 2016-6-8 20:36 编辑

全部用单元格事件完成的,选择D2单元格时,自动以数据库表的单位建立数据有效性带下拉(单位有多少就建立多少)
选择单位时,提取数据(数据库中的人员单位可以乱序)
请看效果


VBA信息调用问题0.rar

16.69 KB, 下载次数: 10

回复

使用道具 举报

发表于 2016-6-8 21:10 | 显示全部楼层    本楼为最佳答案   
本帖最后由 02761752696 于 2016-6-10 14:39 编辑
龙送农 发表于 2016-6-8 19:39
老师:麻烦您帮再修改代码,如果一个单位人员名单在“数据库”不连续时,出现图片这样情况。

这是你的原代码的问题,之前没注意
zza.gif

VBA信息调用问题0608.rar

104 KB, 下载次数: 14

回复

使用道具 举报

 楼主| 发表于 2016-6-8 22:05 | 显示全部楼层
谢谢02761752696和fjmxwrs两位老师解答,效果均达到,再次感谢两位老师!!设佳更纠结,因为02761752696先参与讨论,对不起fjmxwrs老师了!!!!
回复

使用道具 举报

发表于 2016-6-8 22:27 | 显示全部楼层
龙送农 发表于 2016-6-8 22:05
谢谢02761752696和fjmxwrs两位老师解答,效果均达到,再次感谢两位老师!!设佳更纠结,因为02761752696先参 ...

无需纠结,读懂代码的意思才是关键,对学习有帮助即可

评分

参与人数 1 +3 收起 理由
龙送农 + 3 很给力

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2016-6-8 22:47 | 显示全部楼层
02761752696 发表于 2016-6-8 21:10
这是你的原代码的问题,之前没注意

查找出来是同一人信息去了,再麻烦老师看看.
回复

使用道具 举报

发表于 2016-6-8 23:03 | 显示全部楼层
龙送农 发表于 2016-6-8 22:47
查找出来是同一人信息去了,再麻烦老师看看.

什么意思???
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-27 11:13 , Processed in 0.482338 second(s), 16 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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