Excel精英培训网

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

[已解决]求助全局字典的使用方法

[复制链接]
发表于 2023-1-13 15:58 | 显示全部楼层 |阅读模式
本帖最后由 jian82372387 于 2023-1-13 16:27 编辑

需求在汇总表1、2中A列输入学号,相应从学生基础信息表中自动提取相关列数据(如果所查学号不存在则跳过),先建立一个全局字典,再通过工作表change事件,A列学号发生变化则自动提取数据
以下是我参考网上写的,但是有问题,无法达到效果,求助大神们帮忙检查一下哪里出门问题了,最好能把解释夜写一下,谢谢。

Public dic学生基础信息 As Dictionary
Function 学生基础信息查询(待查, 列号)
If dic学生基础信息 Is Nothing Then
Dim arr
Set dic学生基础信息 = New Dictionary
arr = Sheets("学生基础信息").Range("A1:H" & Sheets("学生基础信息").Cells(Row.Count, 1).End(xlp).Row).Value
For i = 3 To UBound(arr)
    Key = arr(i, 1) & ""
    If Key <> "" Then
    dic学生基础信息(Key) = i
    End If
Next
End If

学生基础信息查询 = Sheets("学生基础信息").Cells(dic学生基础信息(待查 & ""), 列号)

End Function


Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address Like "*:*" Then
If Not Target.Column = 1 And Target.Row > 2 Then
    Cells(Target.Row, 5) = 学生基础信息查询(Target, 4)
    Cells(Target.Row, 6) = 学生基础信息查询(Target, 3)
    Cells(Target.Row, 7) = 学生基础信息查询(Target, 2)
    Cells(Target.Row, 8) = 学生基础信息查询(Target, 8)
    Cells(Target.Row, 9) = 学生基础信息查询(Target, 7)
    Cells(Target.Row, 10) = 学生基础信息查询(Target, 6)
End If
End If
End Sub
最佳答案
2023-1-13 23:45
用子过程写了,代码没太多的解释,感觉都是些基础的东西,你参考一下。

测试.rar

21.26 KB, 下载次数: 18

发表于 2023-1-13 20:01 | 显示全部楼层
只说字典,
=================
'4 字典在哪里?如何创建字典?

    '字典是由scrrun.dll链接库提供的,要调用字典有两种方法
      '第一种方法:直接创建法
        Dim d
        Set d = CreateObject("scripting.dictionary")

      '第二种方法:引用法
        '工具-引用-浏览-找到scrrun.dll-确定

        Dim d As New Dictionary
=====================================
你这是把 两种方法 糅合 在一起了?




回复

使用道具 举报

 楼主| 发表于 2023-1-13 22:03 | 显示全部楼层
砂海 发表于 2023-1-13 20:01
只说字典,
=================
'4 字典在哪里?如何创建字典?

用的是引用法啊
回复

使用道具 举报

发表于 2023-1-13 22:20 | 显示全部楼层
      '第二种方法:引用法
        '工具-引用-浏览-找到scrrun.dll-确定

        Dim d As New Dictionary
============================


回复

使用道具 举报

发表于 2023-1-13 23:45 | 显示全部楼层    本楼为最佳答案   
用子过程写了,代码没太多的解释,感觉都是些基础的东西,你参考一下。

测试.rar

24.77 KB, 下载次数: 5

评分

参与人数 1学分 +2 收起 理由
jian82372387 + 2 学习了

查看全部评分

回复

使用道具 举报

发表于 2023-1-14 15:49 | 显示全部楼层

有很多方法可以实现:
需求在汇总表1、2中A列输入学号,相应从学生基础信息表中自动提取相关列数据(如果所查学号不存在则跳过),先建立一个全局字典,再通过工作表change事件,A列学号发生变化则自动提取数据


以上功能


方法:
1.先些一个可以调用的模块代码(模块2),可复制下面代码

  1. Sub 更新()
  2.    
  3.     Dim H
  4.     H = Range("A65535").End(xlUp).Row
  5.     If H = 1 Then End
  6.     Range("B2:J65535").ClearContents
  7.     Range("B2") = "=VLOOKUP($A2,成绩信息!$A:$D,MATCH(B$1,成绩信息!$A$2:$D$2,0),0)"
  8.     Range("B2:D2").FillRight
  9.     Range("E2") = "=VLOOKUP($A2,学生基础信息!$A:$H,MATCH(E$1,学生基础信息!$A$2:$H$2,0),0)"
  10.     Range("E2:J2").FillRight
  11.     Range("B2:J" & H).FillDown
  12.     Range("B2:J" & H) = Range("B2:J" & H).Value
  13.    
  14. End Sub

复制代码
2.在汇总1和汇总2的Selectionchange事件写入调用代码,每次会自动运行



回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-29 08:24 , Processed in 0.282398 second(s), 15 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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