Excel精英培训网

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

[已解决]在线请求解答代码含义

[复制链接]
发表于 2013-5-8 22:13 | 显示全部楼层 |阅读模式
本帖最后由 长颈鹿 于 2013-5-8 22:14 编辑

下面是F列的,g、h....等列的代码如何写,谢谢

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim arr, Diction, i!, num
    Set Diction = CreateObject("scripting.dictionary")
    arr = Sheets("表2").Cells(4, 6).Resize(7, 2)
    For i = 1 To UBound(arr)
        Diction(arr(i, 1)) = arr(i, 2)
        
    Next i
    If InStr(1, Target.Address, "F") > 0 Then
        num = Target
        Application.EnableEvents = False
        If Diction.exists(num) Then
            Target = Diction(num)
        Else
            Target = "无此名称"
        End If
        Application.EnableEvents = True
    End If
   
End Sub
最佳答案
2013-5-8 22:38
  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2.     Dim arr, Diction, i!, num
  3.     '字典对象
  4.     Set Diction = CreateObject("scripting.dictionary")

  5.     'F4单元格开始的7行2列读入数组
  6.     arr = Sheets("表2").Cells(4, 6).Resize(7, 2)
  7.     For i = 1 To UBound(arr)
  8.         '数据读入字典
  9.         Diction(arr(i, 1)) = arr(i, 2)
  10.     Next i

  11.     '判断地址中是否包含F1
  12.     '这时有BUG,当是FA-FZ列全,就中招了
  13.     If InStr(1, Target.Address, "F") > 0 Then
  14.         num = Target
  15.         '关闭事件响应,避免事件死循环
  16.         Application.EnableEvents = False
  17.         '在字典中查找内容对应的值(居住性质)
  18.         If Diction.exists(num) Then
  19.             '另外这里应该也错了,Target.Offset(, 1) = Diction(num)
  20.             Target = Diction(num)
  21.         Else
  22.             '单元格内写入无此名称
  23.             Target = "无此名称"
  24.         End If
  25.         '打开事件响应
  26.         Application.EnableEvents = True
  27.     End If
  28. End Sub
复制代码

家庭档案212.rar

15.04 KB, 下载次数: 3

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2013-5-8 22:31 | 显示全部楼层
你这用函数VLOOKUP就很好嘛,用事件还麻烦了。
回复

使用道具 举报

 楼主| 发表于 2013-5-8 22:35 | 显示全部楼层
本帖最后由 长颈鹿 于 2013-5-8 22:37 编辑

我在f4中输入1回车就出相应的“购房自住”,这是我要的要求,用函数必须加辅助列才能实现,但是,我对vba不大懂,至于后面的几列如何实现?谢谢

家庭档案2223.rar

19.92 KB, 下载次数: 1

回复

使用道具 举报

发表于 2013-5-8 22:38 | 显示全部楼层    本楼为最佳答案   
  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2.     Dim arr, Diction, i!, num
  3.     '字典对象
  4.     Set Diction = CreateObject("scripting.dictionary")

  5.     'F4单元格开始的7行2列读入数组
  6.     arr = Sheets("表2").Cells(4, 6).Resize(7, 2)
  7.     For i = 1 To UBound(arr)
  8.         '数据读入字典
  9.         Diction(arr(i, 1)) = arr(i, 2)
  10.     Next i

  11.     '判断地址中是否包含F1
  12.     '这时有BUG,当是FA-FZ列全,就中招了
  13.     If InStr(1, Target.Address, "F") > 0 Then
  14.         num = Target
  15.         '关闭事件响应,避免事件死循环
  16.         Application.EnableEvents = False
  17.         '在字典中查找内容对应的值(居住性质)
  18.         If Diction.exists(num) Then
  19.             '另外这里应该也错了,Target.Offset(, 1) = Diction(num)
  20.             Target = Diction(num)
  21.         Else
  22.             '单元格内写入无此名称
  23.             Target = "无此名称"
  24.         End If
  25.         '打开事件响应
  26.         Application.EnableEvents = True
  27.     End If
  28. End Sub
复制代码
回复

使用道具 举报

发表于 2013-5-8 22:39 | 显示全部楼层
代码帮你注释了,最好是用VLOOKUP吧。事件响应不靠谱。
顶多你就建立对应数据的名称就成了。
回复

使用道具 举报

 楼主| 发表于 2013-5-8 22:42 | 显示全部楼层
谢谢,我看看情况再做决定
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-18 15:06 , Processed in 0.315184 second(s), 11 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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