ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助]如何使用剪贴板的内容进行查找(寻找最有效率的查找)

[复制链接]

TA的精华主题

TA的得分主题

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

好像有点问题。

TA的精华主题

TA的得分主题

发表于 2008-4-1 21:54 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

楼主应明示问题所在。

程序应在word编辑界面中运行,而不是在VB编辑器中。可以在工具栏为其添加按钮或设置快捷键以方便宏的调用。

TA的精华主题

TA的得分主题

发表于 2008-4-1 23:59 | 显示全部楼层

感谢sylun兄的长篇解答

谢谢sylun兄的详细解答,小弟学习了!

TA的精华主题

TA的得分主题

发表于 2008-4-2 06:53 | 显示全部楼层

凑个热闹,提供二种方法:

先选定后运行,请直接提定快捷键操作,如需跨文档,请在Normal.dot中指定。

'* +++++++++++++++++++++++++++++
'* Created By SHOUROU@ExcelHome 2008-4-2 6:51:55
'
仅测试于System: Windows NT Word: 11.0 Language: 2052
'
0378^The Code CopyIn [ThisDocument-ThisDocument]^'
'*
-----------------------------

Option Explicit
'Sub myFind1()
''
请指定快捷键为
CTRL+F
'    Dim strFind As String, myDialog As Dialog
'    On Error Resume Next
'    With Selection
'        strFind = .Text
'        If Len(strFind) > 255 Then Exit Sub
'        Set myDialog = Word.Dialogs(wdDialogEditFind)
'        With myDialog
'            .Find = strFind    '
预置查找内容

'            .Execute
'        End With
'        .HomeKey wdStory
'        Application.CommandBars("Edit").Controls("
查找(&F)...").Execute
'    End With
'End Sub
Sub myFind2()
'
请指定快捷键为
CTRL+F
    Dim strFind As String
    '    On Error Resume Next
    With Selection
        strFind = .Text
        If Len(strFind) > 255 Then Exit Sub
        .Find.Execute findtext:=strFind, Wrap:=wdFindStop
        .HomeKey wdStory
        Application.CommandBars("Edit").Controls("
查找
(&F)...").Execute
    End With
End Sub
'----------------------

TA的精华主题

TA的得分主题

 楼主| 发表于 2008-4-2 08:17 | 显示全部楼层
    昨天在家中不能运行,现在可以运行了,谢谢sylun,就是我想要的结果。
    另外我想实现跨文档的即选即查,守版主能否详细说明一下跨文档怎么快捷查找,不太明白你的程序。

TA的精华主题

TA的得分主题

 楼主| 发表于 2008-4-2 09:24 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
   我还希望对即选即查的VBA进行改良一下,使它能从当前选中的文本开始查找并发生一次查找操作,觉得这样更合理。

TA的精华主题

TA的得分主题

发表于 2008-4-2 23:59 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

感谢老大与sylun兄的创意

  感谢老大提供的两种代码!

  小弟至此方明白了yy10 MM的意图之一:①选中某文本,②按快捷键(如Ctrl+F)调用宏,③自动弹出“查找”对话框,并且选中的文本自动出现在对话框中。也就是说,这样的一种操作中,不再需要常规的先复制文本、再到对话框中粘贴文本的操作。

  感谢老大的简洁方法!

  同时,有一疑问:为何老大的代码,在不选中任何文本的时候,按新指定的Ctrl+F键,会在对话框中出现光标后的一个字呢?能否去除这样的一个多余的字?亦即:无论何时,如果没有选中文本,按Ctrl+F键,都还是Word自身默认的“查找”对话框,不再有其他因为老大的代码新加入的一些东西(注意:仍然需要保留“查找”对话框的记忆功能,即上一次查找过的文本,在没有选中任何文本的时候再一次打开对话框时仍然在对话框中存在该文本)。

  谢谢老大!

  同时谢谢sylun兄热心出手思考解决yy10 MM的问题!  

QUOTE:
以下是引用yy10在2008-4-2 9:24:03的发言:
   我还希望对即选即查的VBA进行改良一下,使它能从当前选中的文本开始查找并发生一次查找操作,觉得这样更合理。

  yy10 MM这样的想法确实更为完善,不过,是从文档的开头发生一次查找呢,还是从选定的文本之后发生一次查找呢?

  希望yy10 MM能够非常详细地阐述一下各种思路(自发此帖以来的所有思路),以便于老大与sylun兄有针对性地着手解决。不然,楼是盖得很高了,可是两大高手也前后为yy10 MM的创意忙得不亦乐乎了!

  另外,希望yy10 MM能够尊重sylun兄与老大的劳动成果,对他们的代码在进行一些测试之后,给予一定的反馈,不然,高手虽然热心,但不知yy10 MM的满足与否,也多少有些枉了他们的苦心。

TA的精华主题

TA的得分主题

发表于 2008-4-3 06:07 | 显示全部楼层
QUOTE:
以下是引用雨雪霏霏在2008-4-2 23:59:21的发言:

  同时,有一疑问:为何老大的代码,在不选中任何文本的时候,按新指定的Ctrl+F键,会在对话框中出现光标后的一个字呢?能否去除这样的一个多余的字?亦即:无论何时,如果没有选中文本,按Ctrl+F键,都还是Word自身默认的“查找”对话框,不再有其他因为老大的代码新加入的一些东西(注意:仍然需要保留“查找”对话框的记忆功能,即上一次查找过的文本,在没有选中任何文本的时候再一次打开对话框时仍然在对话框中存在该文本)。

  

  另外,希望yy10 MM能够尊重sylun兄与老大的劳动成果,对他们的代码在进行一些测试之后,给予一定的反馈,不然,高手虽然热心,但不知yy10 MM的满足与否,也多少有些枉了他们的苦心。

第一个问题,可以规避。

对于Selection对象,即使将所选内容折叠为插入点,该对象也不一定为空。例如,Text 属性仍将返回至插入点右侧的字符;该字符也将在 Selection 对象的 Characters 集合中显示,即Selection.Characters(1).Text.

'* +++++++++++++++++++++++++++++
'* Created By SHOUROU@ExcelHome 2008-4-3 5:58:29
'
仅测试于System: Windows NT Word: 11.0 Language: 2052
'
0379^The Code CopyIn [ThisDocument-ThisDocument]^'
'*
-----------------------------

Sub myFind2()
'
请指定快捷键为
CTRL+F
    Dim strFind As String
        On Error Resume Next
    With Selection
        If .Type <> wdSelectionIP Then
            strFind = .Text
            If Len(strFind) > 255 Then Exit Sub
            .Find.Execute findtext:=strFind, Wrap:=wdFindStop
            .HomeKey wdStory
        End If
        Application.CommandBars("Edit").Controls("
查找
(&F)...").Execute
    End With
End Sub
'----------------------


支持雨兄的意见,希望楼主认真测试与体会,另外,一定要阐明你的目的和要求,减少绕弯和无用功。

TA的精华主题

TA的得分主题

 楼主| 发表于 2008-4-3 09:17 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
QUOTE:
以下是引用雨雪霏霏在2008-4-2 23:59:21的发言:

  希望yy10 MM能够非常详细地阐述一下各种思路(自发此帖以来的所有思路),以便于老大与sylun兄有针对性地着手解决。不然,楼是盖得很高了,可是两大高手也前后为yy10 MM的创意忙得不亦乐乎了!

  另外,希望yy10 MM能够尊重sylun兄与老大的劳动成果,对他们的代码在进行一些测试之后,给予一定的反馈,不然,高手虽然热心,但不知yy10 MM的满足与否,也多少有些枉了他们的苦心。

     谢谢雨雪霏霏的挚言,我是第一次发帖,可能给你有不尊重的感觉,其实我是很真诚的。守版主给的代码我不知道怎么用,我不好说。

      最近在做一个书目,需要进行大量的查找,所以才有此贴,我不是存心要盖楼的,向来喜欢潜水,前几天看了守版主及各位高手的一些文章,觉得word真是很强大,所以就想请教各位,实现我的一些新奇的功能。下面再阐述一下我的需求。

      1.首先想解决跨文档的即选即查,在文档1中选中文字,依然在文档1中单击一个按钮即可在文档2中查找选中的文字,守版主说“如需跨文档,请在Normal.dot中指定。”,好像有解决方案,我学识太浅,不太明白这是什么意思,希望能明示,最好有代码。

    2.想实现从当前选中的文字开始即选即查,如同雨雪菲菲分析的,从选定的文本开始发生一次查找(不是从文档的开头,也不是选定的文本之后),也即单击一个按钮即可刚好查找到当前选中的文字,之前执行sylun的程序时,老是跳转到文档的开头,而且也没有查找动作,我不希望它跳转,只希望刚好找到我选中的。

   3.更懒一点的即选即查,也就是之前所说的不弹出查找对话框的即选即查,因为经常需要关闭查找对话框再进行另外的即选即查,不知能不能在查找时不弹出查找对话框,直接查找到我选中的文本,这样我就可以用查找下一处的箭头进行查找。

       来这里只是想说出一些关于如何高效地使用word的想法,这些对大家都是适用的,其实可以使用常规的方法,但我觉得如果有更快的方法那何乐而不为呢。关于我前面说的一些其他问题希望也能关注一下。

     另外很感谢雨雪菲菲的关注,昨天特意搜了一下你的帖子,如同大家所说的,文采飞扬,带给大家一种享受,希望以后多看到你的帖子。

TA的精华主题

TA的得分主题

发表于 2008-4-3 10:52 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

楼主这次提出的要求应该是明确的。我想关于第一条,版主的意思是将本过程代码放在Normal中,而不是放在测试文档中,代码是一样的。这样就可针对当前的活动文档。
至于后面两条,因原程序不清楚楼主的总体想法,故只是猜着做。我将前面的程序改改了一下,看看是否符合要求:

Sub MyFind()
'没考虑选定区域查找
Dim myData As DataObject
With Selection
    If .Type = wdSelectionNormal And .Characters.Count < 255 Then
        .Copy
    End If
End With
Selection.Collapse wdCollapseStart
Set myData = New DataObject
myData.GetFromClipboard
With Dialogs(wdDialogEditFind)
    .Find = myData.GetText(1)
    .Execute
End With
End Sub

另外,我对VBA只是刚入门,平常回帖也主要以练习为目的,水平自然不可与老大相提并论。版主的代码使用了不同的对象方法,更显高效。谢谢老大示范!

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

本版积分规则

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

GMT+8, 2025-1-15 21:10 , Processed in 0.025298 second(s), 6 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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