ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 如何修改代码,做到将关键字所在段落提取到新文档时保持原有格式

[复制链接]

TA的精华主题

TA的得分主题

发表于 2019-6-1 09:18 | 显示全部楼层 |阅读模式
本帖最后由 tangqingfu 于 2019-6-1 09:54 编辑

以下是杜老师帮忙编写的代码(将关键字所在的段落提取到新文档中),可惜无法做到保持原有格式(颜色),请教如何修改代码做到提取后保留原有格式(如字体,颜色等)?
  1. Sub main()
  2.     Dim doc As Document, re As Object, mh As Object
  3.     Dim mystr$, keystr$, restr$, results$, i&, n&
  4.     If Selection.Type = wdSelectionIP Then
  5.         MsgBox "没选择关键字!": Exit Sub
  6.     Else
  7.         keystr = Selection.Text '选择文档中某一处“关键字”
  8.     End If
  9.     For i = 1 To Len(keystr)
  10.         restr = restr & "\u" & Right("0000" & Hex$(AscW(Mid(keystr, i, 1))), 4)
  11.     Next
  12.     Set doc = ActiveDocument
  13.     mystr = doc.Content.Text
  14.     Set re = CreateObject("vbscript.regexp")
  15.     re.Global = True: re.Pattern = restr
  16.     Dim d As Object
  17.     Set d = CreateObject("Scripting.Dictionary")
  18.     For Each mh In re.Execute(mystr)
  19.         i = mh.FirstIndex: n = mh.Length
  20.         With doc.Range(i, i + n)
  21.             .Expand 4
  22.             d(.Text) = vbNullString
  23.         End With
  24.     Next
  25.     For Each k In d.keys
  26.         results = results & k
  27.     Next
  28.     With Documents.Add
  29.         .Content.InsertAfter results
  30.     End With
  31. End Sub
复制代码


test11.rar

3.79 KB, 下载次数: 5

TA的精华主题

TA的得分主题

发表于 2019-6-1 09:49 | 显示全部楼层
上个帖子中不是已经做过相关的讨论了吗,有附件才好写代码
Sub test()
    Dim mydoc As Document, p As Range
    Set mydoc = Documents.Add
    With ThisDocument.Content.Find
        .ClearFormatting
        .Font.Color = wdColorGreen
        Do While .Execute
            Set p = .Parent.Paragraphs(1).Range.FormattedText
            With mydoc.Range
                .Collapse wdCollapseEnd
                .FormattedText = p
            End With
            .Parent.Move 4
        Loop
    End With
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-6-1 09:52 | 显示全部楼层
小花鹿 发表于 2019-6-1 09:49
上个帖子中不是已经做过相关的讨论了吗,有附件才好写代码
Sub test()
    Dim mydoc As Document, p As  ...

竟忘了发附件了,请兄台指点

test11.rar

3.79 KB, 下载次数: 13

TA的精华主题

TA的得分主题

发表于 2019-6-1 11:10 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
tangqingfu 发表于 2019-6-1 09:52
竟忘了发附件了,请兄台指点

Sub test()
    Dim mydoc As Document, p As Range, s
    If Selection.Type = wdSelectionIP Then
        MsgBox "没选择关键字!": Exit Sub
    Else
        s = Selection.Text
    End If
    Set mydoc = Documents.Add
    With ThisDocument.Content.Find
        .ClearFormatting
        .Text = s
        Do While .Execute
            Set p = .Parent.Paragraphs(1).Range.FormattedText
            With mydoc.Range
                .Collapse wdCollapseEnd
                .FormattedText = p
            End With
            .Parent.Move 4
        Loop
    End With
End Sub

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-6-1 14:22 | 显示全部楼层
本帖最后由 tangqingfu 于 2019-6-1 15:35 编辑
小花鹿 发表于 2019-6-1 11:10
Sub test()
    Dim mydoc As Document, p As Range, s
    If Selection.Type = wdSelectionIP Then
  1. Sub test()
  2.     Dim mydoc As Document, p As Range, s
  3.     If Selection.Type = wdSelectionIP Then
  4.         MsgBox "没选择关键字!": Exit Sub
  5.     Else
  6.         s = Selection.Text
  7.     End If
  8.     Set mydoc = Documents.Add
  9.     With ActiveDocument.Content.Find
  10.         .ClearFormatting
  11.         .Text = s
  12.         Do While .Execute
  13.             Set p = .Parent.Paragraphs(1).Range.FormattedText
  14.             With mydoc.Range
  15.                 .Collapse wdCollapseEnd
  16.                 .FormattedText = p
  17.             End With
  18.             .Parent.Move 4
  19.         Loop
  20.     End With
  21. End Sub
复制代码
把ThisDocument改为ActiveDocument
并把代码置于文档模板,并复制到Word 2016的STARTUP文件夹下,在测试中发现提取到新文档时,新文档内容为空,能否请兄台帮忙解决?

音标归类.rar

10.69 KB, 下载次数: 11

TA的精华主题

TA的得分主题

发表于 2019-6-1 18:50 | 显示全部楼层
本帖最后由 小花鹿 于 2019-6-1 18:55 编辑
tangqingfu 发表于 2019-6-1 14:22
把ThisDocument改为ActiveDocument
并把代码置于文档模板,并复制到Word 2016的STARTUP文件夹下,在测试 ...

Sub 音标分类()
   Dim mydoc As Document, p As Range, s, thisdoc As Document
    If Selection.Type = wdSelectionIP Then
        MsgBox "您未选择关键字,请选择关键字后再运行程序!": Exit Sub
    Else
        s = Selection.Text
    End If
    Set thisdoc = ActiveDocument
    Set mydoc = Documents.Add
    With thisdoc.Content.Find
        .ClearFormatting
        .Text = s
        Do While .Execute
            Set p = .Parent.Paragraphs(1).Range.FormattedText
            With mydoc.Range
                .Collapse wdCollapseEnd
                .FormattedText = p
            End With
            .Parent.Move 4
        Loop
    End With
End Sub

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-6-1 21:00 | 显示全部楼层
小花鹿 发表于 2019-6-1 18:50
Sub 音标分类()
   Dim mydoc As Document, p As Range, s, thisdoc As Document
    If Selection.Typ ...

测试很完美,谢谢小花鹿兄的一再帮助!

TA的精华主题

TA的得分主题

发表于 2019-6-2 01:59 | 显示全部楼层
谢谢 小花鹿 老师!又学到一个“属性”(.FormattedText保持格式文本,但它返回 .Range 对象)。
同时也学到了 .Move 4(4 为 Unit:=wdParagraph 的值)这个“属性”(光标向前一个段落)。

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-5-13 08:12 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
小花鹿 发表于 2019-6-1 18:50
Sub 音标分类()
   Dim mydoc As Document, p As Range, s, thisdoc As Document
    If Selection.Typ ...

能否请老师帮忙解决这个帖子的问题?
http://club.excelhome.net/thread-1584723-1-1.html
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-27 13:42 , Processed in 0.047747 second(s), 17 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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