Excel精英培训网

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

[已解决]求助大神VBA

[复制链接]
发表于 2022-12-11 21:44 | 显示全部楼层 |阅读模式
各位大神,求助,在做临时存储区域的数据查询后不会动态变化,只是显示第一行。而且数据查询效率特别慢,在work 的change事件中。帮忙改改。
Private Sub Worksheet_Change(ByVal Target As Range)  '当表格发生变化时,以i16编号变化 加载对应信息

On Error Resume Next  '如果运行错误则忽略

    Set selectsheet = Application.ThisWorkbook.Worksheets("信息查询界面")  '设置工作表

   If Target = selectsheet.Range("i16") Then

      If selectsheet.Range("i16") <> 0 Then

selectsheet.Range("C18") = Application.WorksheetFunction.VLookup(selectsheet.Range("i16"), selectsheet.Range("A38:Y10000"), 2, 0)

selectsheet.Range("C19") = Application.WorksheetFunction.VLookup(selectsheet.Range("i16"), selectsheet.Range("A38:Y10000"), 3, 0)


selectsheet.Range("C20") = Application.WorksheetFunction.VLookup(selectsheet.Range("i16"), selectsheet.Range("A38:Y10000"), 4, 0)

selectsheet.Range("C21") = Application.WorksheetFunction.VLookup(selectsheet.Range("i16"), selectsheet.Range("A38:Y10000"), 5, 0)


selectsheet.Range("C22") = Application.WorksheetFunction.VLookup(selectsheet.Range("i16"), selectsheet.Range("A38:Y10000"), 6, 0)


selectsheet.Range("C23") = Application.WorksheetFunction.VLookup(selectsheet.Range("i16"), selectsheet.Range("A38:Y10000"), 7, 0)

selectsheet.Range("E18") = Application.WorksheetFunction.VLookup(selectsheet.Range("i16"), selectsheet.Range("A38:Y10000"), 8, 0)


selectsheet.Range("E19") = Application.WorksheetFunction.VLookup(selectsheet.Range("i16"), selectsheet.Range("A38:Y10000"), 9, 0)


selectsheet.Range("E20") = Application.WorksheetFunction.VLookup(selectsheet.Range("i16"), selectsheet.Range("A38:Y10000"), 10, 0)


selectsheet.Range("E21") = Application.WorksheetFunction.VLookup(selectsheet.Range("i16"), selectsheet.Range("A38:Y10000"), 11, 0)

selectsheet.Range("E22") = Application.WorksheetFunction.VLookup(selectsheet.Range("i16"), selectsheet.Range("A38:Y10000"), 12, 0)

selectsheet.Range("E23") = Application.WorksheetFunction.VLookup(selectsheet.Range("i16"), selectsheet.Range("A38:Y10000"), 13, 0)

selectsheet.Range("G18") = Application.WorksheetFunction.VLookup(selectsheet.Range("i16"), selectsheet.Range("A38:Y10000"), 14, 0)

selectsheet.Range("G19") = Application.WorksheetFunction.VLookup(selectsheet.Range("i16"), selectsheet.Range("A38:Y10000"), 15, 0)

selectsheet.Range("G20") = Application.WorksheetFunction.VLookup(selectsheet.Range("i16"), selectsheet.Range("A38:Y10000"), 16, 0)

selectsheet.Range("G21") = Application.WorksheetFunction.VLookup(selectsheet.Range("i16"), selectsheet.Range("A38:Y10000"), 17, 0)

selectsheet.Range("G22") = Application.WorksheetFunction.VLookup(selectsheet.Range("i16"), selectsheet.Range("A38:Y10000"), 18, 0)

selectsheet.Range("I18") = Application.WorksheetFunction.VLookup(selectsheet.Range("i16"), selectsheet.Range("A38:Y10000"), 19, 0)


selectsheet.Range("I19") = Application.WorksheetFunction.VLookup(selectsheet.Range("i16"), selectsheet.Range("A38:Y10000"), 20, 0)



selectsheet.Range("I20") = Application.WorksheetFunction.VLookup(selectsheet.Range("i16"), selectsheet.Range("A38:Y10000"), 21, 0)


selectsheet.Range("I21") = Application.WorksheetFunction.VLookup(selectsheet.Range("i16"), selectsheet.Range("A38:Y10000"), 22, 0)


selectsheet.Range("I22") = Application.WorksheetFunction.VLookup(selectsheet.Range("i16"), selectsheet.Range("A38:Y10000"), 23, 0)


selectsheet.Range("I23") = Application.WorksheetFunction.VLookup(selectsheet.Range("i16"), selectsheet.Range("A38:Y10000"), 24, 0)


      Else

       selectsheet.Range("C18:C23,E18:E23,G18:G22,i18:i23") = ""

        End If



    End If
END  sub

最佳答案
2022-12-11 23:02
试试
  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2.      Set selectsheet = Application.ThisWorkbook.Worksheets("信息查询界面")  '设置工作表
  3.      m = 1
  4.      If Target = selectsheet.Range("i16") Then
  5.         If selectsheet.Range("i16") <> 0 Then
  6.             For i = 3 To 9 Step 2
  7.                 For j = 18 To 23
  8.                     m = m + 1
  9.                     selectsheet.Cells(j, i) = Application.WorksheetFunction.VLookup(selectsheet.Range("i16"), selectsheet.Range("A38:Y10000"), m, 0)
  10.                 Next j
  11.             Next i
  12.         End If
  13.      Else
  14.         selectsheet.Range("C18:C23,E18:E23,G18:G22,i18:i23") = ""
  15.      End If
  16. End Sub
复制代码

翻页界面

翻页界面
发表于 2022-12-11 23:02 | 显示全部楼层    本楼为最佳答案   
试试
  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2.      Set selectsheet = Application.ThisWorkbook.Worksheets("信息查询界面")  '设置工作表
  3.      m = 1
  4.      If Target = selectsheet.Range("i16") Then
  5.         If selectsheet.Range("i16") <> 0 Then
  6.             For i = 3 To 9 Step 2
  7.                 For j = 18 To 23
  8.                     m = m + 1
  9.                     selectsheet.Cells(j, i) = Application.WorksheetFunction.VLookup(selectsheet.Range("i16"), selectsheet.Range("A38:Y10000"), m, 0)
  10.                 Next j
  11.             Next i
  12.         End If
  13.      Else
  14.         selectsheet.Range("C18:C23,E18:E23,G18:G22,i18:i23") = ""
  15.      End If
  16. End Sub
复制代码
回复

使用道具 举报

 楼主| 发表于 2022-12-12 13:51 | 显示全部楼层
数据再不停的刷新,卡死我的excel了。还有i=7时,只有18,19,20,21,22.位置摆放有点问题,好像不行啊
回复

使用道具 举报

 楼主| 发表于 2022-12-12 15:00 | 显示全部楼层

大神,帮忙改改,是不是代码放在change事件和会不停的刷新啊,还有两个上下翻页按钮按了也没用
回复

使用道具 举报

发表于 2022-12-12 19:35 | 显示全部楼层
赛柯南 发表于 2022-12-12 15:00
大神,帮忙改改,是不是代码放在change事件和会不停的刷新啊,还有两个上下翻页按钮按了也没用

我只是帮你把那一大串的vlookup改成for循环,具体你想达到什么效果我也不清楚你,而change事件作出条件限定就不会不停的刷新。
回复

使用道具 举报

 楼主| 发表于 2022-12-12 19:37 | 显示全部楼层
哥儿- 发表于 2022-12-12 19:35
我只是帮你把那一大串的vlookup改成for循环,具体你想达到什么效果我也不清楚你,而change事件作出条件限 ...

幸苦了,我的目的就是要跟随i16格的数字上下按钮变化显示对应下面的行数据。
回复

使用道具 举报

发表于 2022-12-12 20:17 | 显示全部楼层
赛柯南 发表于 2022-12-12 19:37
幸苦了,我的目的就是要跟随i16格的数字上下按钮变化显示对应下面的行数据。

单微调项调节数值,应该无法触发change事件吧。控件是写有代码的?上附件说需求,不然我也看不懂,或者你等一个看得懂你需求的大佬。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-2 08:11 , Processed in 0.562317 second(s), 10 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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