ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 如何用vb实现整个工作薄查找功能

[复制链接]

TA的精华主题

TA的得分主题

发表于 2016-8-26 13:18 | 显示全部楼层 |阅读模式
本帖最后由 xyh459954 于 2016-8-26 13:19 编辑

比如我有3张工作表,每个单元格值唯一,现在搜索值“3512”,位置应该在 sheet2 [b50]这里在excel中使用ctrl+f 范围选择 工作薄,能够直接定位到  sheet2 [b50]

使用vb cells.find只能在当前工作表搜索
excel中的工作薄查找 无论当前工作表是哪张,都能定位到 sheet2 [b50]
vb能实现么

希望代码不要太长 最好一个句子就能实现

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-8-26 13:35 | 显示全部楼层
for i=1 to sheets.count   
Sheets(i).[A:A].Find(What:="3512", After:=ActiveCell, LookIn:=xlFormulas, LookAt:=xlWhole).Activate
next
我自己只能想到这种 但是运行不行  有没有大神指导下

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-8-26 14:04 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
人工顶一下  其实复杂的方式 各种循环网上都有  但是代码太长
excel的使用都这么方便 vb难道不能实现?

TA的精华主题

TA的得分主题

发表于 2016-8-26 14:17 | 显示全部楼层
xyh459954 发表于 2016-8-26 14:04
人工顶一下  其实复杂的方式 各种循环网上都有  但是代码太长
excel的使用都这么方便 vb难道不能实现?

这种遍历所有工作表查找用1至2句代码完成不太现实,首先循环所有工作表,再用Find函数查找,然后要用判断语句,判断是否找到,不用就会出错(是非肯定指定工作表存在查找数据)。找到后激活工作表,最后激活找到所在的单元格地址。

TA的精华主题

TA的得分主题

发表于 2016-8-26 15:03 | 显示全部楼层
xyh459954 发表于 2016-8-26 13:35
for i=1 to sheets.count   
Sheets(i).[A:A].Find(What:="3512", After:=ActiveCell, LookIn:=xlFormula ...
  1. Sub test()
  2.     Dim Str$, rng As Range
  3.     Str = Application.InputBox("请输入查找内容:", "请输入查找内容", , , , , , 2)
  4.     If Len(Str) = 0 Then Exit Sub
  5.     For Each sht In Sheets
  6.         sht.Select
  7.         Set rng = Cells.Find(Str, , , 1)
  8.         If Not rng Is Nothing Then
  9.             rng.Select
  10.         End If
  11.     Next sht
  12.     MsgBox "数据所在的工作表名称为: “" & ActiveSheet.Name & "”,单元格地址为:“" & ActiveCell.Address & "”。"
  13. End Sub
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-8-26 15:07 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

On Error GoTo E
i = 1
Set MyRg = Sheets("票据统计2").Cells(i, 2)
E:
i = n + 1
Sheets(i).Activate
    Cells.Find(What:=MyRg, After:=ActiveCell, LookIn:=xlFormulas, _
        LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext).Activate

这个合适么?

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-8-26 15:10 | 显示全部楼层
On Error GoTo E
E:
i = i + 1
Sheets(i).Activate
    Cells.Find(What:=MyRg, After:=ActiveCell, LookIn:=xlFormulas, _
        LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext).Activate
这种可行么

TA的精华主题

TA的得分主题

发表于 2016-8-26 15:16 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
你必须通过遍历工作表循环 For Each sht In Sheets

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-8-26 15:17 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
为什么 on error goto E 加入循环之后 查找第一个值可以  查找第二个值 依然 会提示出错
on error goto E 不能一直有效么

附上代码
For i = 2 To 1400
n = 1
Set MyRg = Sheets("票据统计2").Cells(i, 2)
E:
On Error GoTo E
n = n + 1
Sheets(n).Activate
      Cells.Find(What:=MyRg, After:=ActiveCell, LookIn:=xlFormulas, _
        LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext).Activate

TA的精华主题

TA的得分主题

发表于 2016-8-26 15:19 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2025-1-8 23:53 , Processed in 0.024270 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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