ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 如何根据关键字筛选出相应的句子

[复制链接]

TA的精华主题

TA的得分主题

发表于 2018-4-5 21:58 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
想通过宏的方式,直接将所有含有“风”字的诗句,以句号的形式显示出来。如下图所示。
宏的代码最好是方便修改,因为还想能过这个代码将含有“春”“雨”……等关键字的诗句以句号为标志显示出来。
只以句号、问号、感叹号、省略号为标志,如“明月何时照我还?”那一句,是以问号结束的。不要整个段落都显示。但“忽如一夜春风来,千树万树梨花开。桃花一簇开无主,可爱深红爱浅红。”这一句,只显示“忽如一夜春风来,千树万树梨花开。”而“桃花一簇开无主,可爱深红爱浅红。”则不显示。

以某个关键字显示整个句子.zip

16.23 KB, 下载次数: 44

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-4-5 22:03 | 显示全部楼层
如果能不用代码,有其他的方法也可以

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-4-5 22:12 | 显示全部楼层
比如在 查找  对话框里面如果有办法就最好了

TA的精华主题

TA的得分主题

发表于 2018-4-5 22:36 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
mmcha2002 发表于 2018-4-5 22:03
如果能不用代码,有其他的方法也可以

Sub TEST()
    Dim d As Document, k()
    k = Array("风", "春") '自己添加关键词
    Set d = ActiveDocument
    With d.Content
        .Font.ColorIndex = wdAuto
        .HighlightColorIndex = wdNoHighlight
    End With
    For i = 0 To UBound(k)
        With d.Content.Find
            Do While .Execute(k(i))
                With .Parent
                    .Expand wdSentence
                    .HighlightColorIndex = wdYellow
                    .Start = .End
                End With
            Loop
        End With
    Next
End Sub

评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2018-4-5 22:43 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 duquancai 于 2018-4-5 22:47 编辑

看你表达很清楚,也有附件,另外:“只以句号、问号、感叹号、省略号为标志” 这个正好是 MSoffice默认的 “句子对象”!
所以:我写代码了!

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-4-6 12:22 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
duquancai 发表于 2018-4-5 22:43
看你表达很清楚,也有附件,另外:“只以句号、问号、感叹号、省略号为标志” 这个正好是 MSoffice默认的  ...

Sub test1()
    Dim findtext As String, n As Integer, info As String
    findtext = InputBox("请输入要查的单词", , "Number")
    If findtext <> "" Then
        With ActiveDocument.Content.Find
            .Text = findtext
            .MatchAllWordForms = True
            Do While .Execute
                n = n + 1
                With .Parent
                    .Expand wdSentence
                    If .Text Like "*" & Chr(13) Then .End = .End - 1
                    info = info & n & vbTab & .Text & Chr(13)
                    .Collapse wdCollapseEnd
                End With
            Loop
        End With
        With Documents.Add.Content
            .Text = info
        End With
    End If
End Sub

谢谢您!!!

您好,之前见到过这样一个代码,运行代码后,会出现一个对话框,只要在里面直接输入所需要查找的文字即可。只是我不需要像这样另外建一个文档,只要在原有文件里面显示相关的含有某个关键字的相关句子即可。不知道您给出的代码能不能也像这个一样,单独出现一个对话框,这样以后我只要在对话框里面输入所要查找的字就行。再次谢谢您

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-4-6 12:25 | 显示全部楼层
duquancai 发表于 2018-4-5 22:43
看你表达很清楚,也有附件,另外:“只以句号、问号、感叹号、省略号为标志” 这个正好是 MSoffice默认的  ...

谢谢您,辛苦您了!!

Sub test1()
    Dim findtext As String, n AsInteger, info As String
    findtext = InputBox("请输入要查的单词",, "Number")
    If findtext <>"" Then
        WithActiveDocument.Content.Find
           .Text = findtext
           .MatchAllWordForms = True
           Do While .Execute
               n = n + 1
               With .Parent
                   .Expand wdSentence
                   If .Text Like"*" & Chr(13) Then .End = .End - 1
                   info = info & n& vbTab & .Text & Chr(13)
                   .CollapsewdCollapseEnd
               End With
           Loop
        EndWith
        WithDocuments.Add.Content
           .Text = info
        EndWith
    End If
End Sub


这是我之前见到过的一个代码,运行宏的时候,会单独出现一个对话框,如图所示。只是我不需要像这个代码一样重新建一个文档。所以,想请问您,不知道您的代码能不能也像这样出现一个对话框,这样,我就可以直接在对话框里面输入相应的文字,这样查找起来会更方便一些。
为什么有的代码可以出现这种对话框?.jpg

TA的精华主题

TA的得分主题

发表于 2018-4-6 14:31 | 显示全部楼层
mmcha2002 发表于 2018-4-6 12:25
谢谢您,辛苦您了!!

Sub test1()    Dim findtext As String, n AsInteger, info As String    find ...

Sub test()
    Dim findtext As String, d As Document
    findtext = InputBox("请输入要查的单词", , "风")
    If findtext = Empty Then Exit Sub
    Set d = ActiveDocument
    With d.Content
        .Font.ColorIndex = wdAuto
        .HighlightColorIndex = wdNoHighlight
    End With
    With d.Content.Find
        Do While .Execute(findtext)
            With .Parent
                .Expand wdSentence
                .HighlightColorIndex = wdYellow
                .Start = .End
            End With
        Loop
    End With
End Sub

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-4-6 20:04 | 显示全部楼层
duquancai 发表于 2018-4-6 14:31
Sub test()
    Dim findtext As String, d As Document
    findtext = InputBox("请输入要查的单词", ...

非常感谢您

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-4-6 22:52 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
duquancai 发表于 2018-4-6 14:31
Sub test()
    Dim findtext As String, d As Document
    findtext = InputBox("请输入要查的单词", ...

谢谢您。感谢您一直回复我的信息。您的代码太实用了。只是,突然还有个小小的请求。比如说,我想找到一个句子中同时含有“风”“雨”,或者同时含有三个或三个以上的字的句子,如同时含有“风”“雨”“云”等等,或者同时含有“风”“雨”“云”“风”等等。在这种情况下,如何修改一下代码,使得在弹出的对话框中,直接输入所有要查找的关键字即可呢?
不知道这个想法,是不是有点不太实际……
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-4-27 08:56 , Processed in 0.044700 second(s), 18 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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