ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 1161|回复: 9

求助:查询功能

[复制链接]

TA的精华主题

TA的得分主题

发表于 2014-1-23 14:42 | 显示全部楼层 |阅读模式

为了实现按“查询”表格中的cells(3,2)名字进行查询,使“劳保领用"表格中的相关记录复制到”查询“表来,可是我编写的程序是不可以循环实现的,请高手指点,谢谢!


Private Sub cmmd_Click()
Dim i, j, k As Integer, rng As Range, b As String
i = Worksheets("劳保领用").Range("a65536").End(xlUp)
k = Worksheets("查询").Range("a65536").End(xlUp).Offset(1, 0)
b = Worksheets("查询").Cells(3, 2).Value
Set rng = Worksheets("查询").Range("a65536").End(xlUp).Offset(1, 0)
For j = 2 To i
If Worksheets("劳保领用").Cells(j, "b").Value = b Then
Worksheets("劳保领用").Cells(j, 1).Resize(1, 7).Copy rng
k = k + 1
End If
Next
End Sub

TA的精华主题

TA的得分主题

发表于 2014-1-23 14:54 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
没有附件,没有答案。

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-1-23 16:02 | 显示全部楼层
现增加附件如下

复件 劳保.rar

11.87 KB, 下载次数: 18

TA的精华主题

TA的得分主题

发表于 2014-1-24 11:32 | 显示全部楼层
lyq110808 发表于 2014-1-23 16:02
现增加附件如下

附件里上面是用公式完成基本信息的查询,即当输入姓名自动查询到基本信息。
这样下面的劳保领用信息使用按钮查询就不合适,不统一。因此改用工作表事件完成,当姓名输入完成时,下面的信息也立刻查询完成。在查询表中添加下面的worksheet_change 事件代码

  1. Private Sub Worksheet_Change(ByVal Target As Range)

  2.     If Target.Address <> "$B$3" Then Exit Sub
  3.    
  4.     Application.EnableEvents = False
  5.    
  6.     Dim arr, tarr(), i%, j%, n%, xrow%
  7.     n = 1
  8.     arr = Sheets("劳保领用").[a1].CurrentRegion

  9.     ReDim tarr(1 To UBound(arr), 1 To UBound(arr, 2))

  10.     With Sheets("查询")
  11.         xrow = .Cells(.Rows.Count, 1).End(xlUp).Row
  12.         
  13.         For i = 1 To UBound(arr)
  14.             If arr(i, 2) = .Cells(3, 2).Value Then
  15.                
  16.                 For j = 1 To UBound(arr, 2)
  17.                     tarr(n, j) = arr(i, j)
  18.                 Next
  19.                 n = n + 1
  20.             End If
  21.         Next
  22.         If xrow > 8 Then .Range(.Cells(8, "a"), .Cells(xrow, "g")).ClearContents
  23.         
  24.         .Cells(8, "a").Resize(n, UBound(tarr, 2)) = tarr
  25.     End With


  26.     Application.EnableEvents = True
  27. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2014-1-24 11:33 | 显示全部楼层
antlia 发表于 2014-1-24 11:32
附件里上面是用公式完成基本信息的查询,即当输入姓名自动查询到基本信息。
这样下面的劳保领用信息使用 ...

请参考附件

复件 劳保.zip

12.73 KB, 下载次数: 43

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-1-24 13:57 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
antlia 发表于 2014-1-24 11:33
请参考附件

非常感谢!

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-1-24 14:08 | 显示全部楼层
antlia 发表于 2014-1-24 11:33
请参考附件

想送你鲜花的,可以不知道怎么弄的??

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-1-24 16:17 | 显示全部楼层
antlia 发表于 2014-1-24 11:32
附件里上面是用公式完成基本信息的查询,即当输入姓名自动查询到基本信息。
这样下面的劳保领用信息使用 ...

For j = 1 To UBound(arr, 2)
           tarr(n, j) = arr(i, j)

看不懂这里tarr(n,j)中的n前面不是赋值是n=1吗?

TA的精华主题

TA的得分主题

发表于 2014-1-24 16:49 | 显示全部楼层
lyq110808 发表于 2014-1-24 16:17
For j = 1 To UBound(arr, 2)
           tarr(n, j) = arr(i, j)

送花是点评分。

n 是记录tarr 这个数组有多少有效记录的,如果查到有效的记录,就把该行数据写入tarr 数组的第n 行中。
n 的初值是1,代表从第一行开始写,每写一行就会执行n=n+1
这样当循环结束时,tarr 里面的有效数据就是n行。

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-7-30 14:30 | 显示全部楼层
antlia 发表于 2014-1-24 11:33
请参考附件

antlia你好,我想再请教一下你,为什么这附件的worksheet.change事件突然就不响应了?
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-23 04:37 , Processed in 0.037794 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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