ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 如何将两份WORD文档按题目序号结合排在一起

[复制链接]

TA的精华主题

TA的得分主题

发表于 2016-7-22 21:52 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
有两份WORD文档,一份为题目,一份为答案,想用VB或宏将答案复制到对应的题目后面。

文档.rar

304.66 KB, 下载次数: 42

TA的精华主题

TA的得分主题

发表于 2016-7-24 14:37 | 显示全部楼层
  1. Sub mate()
  2.     Path = ThisDocument.Path
  3.     ActiveDocument.SaveAs Path & "\题目答案配对.doc", FileFormat:=wdFormatDocument
  4.     Documents.Open Path & "\答案.doc"
  5.     i = 1: j = 1
  6.     Do
  7.        Windows("答案").Activate
  8.        If j = 1 Then Selection.HomeKey Unit:=wdStory '找第1个i.时才置于文首
  9.        With Selection.Find
  10.            .ClearFormatting
  11.            .Text = "^13(" & i & ".)*^13"
  12.            .Forward = True
  13.            .MatchWildcards = True
  14.            If .Execute Then
  15.               t = Mid(Selection, 2, 999)
  16.               Selection.MoveRight Unit:=wdCharacter, Count:=1
  17.               Selection.MoveDown Unit:=wdParagraph, Count:=1, Extend:=1 '答案包含多段
  18.               Do
  19.                  temp = Selection.Text
  20.                  Selection.MoveRight Unit:=wdCharacter, Count:=1
  21.                  If temp = "" Or temp = Chr(13) Then '至文末
  22.                      n = i + 1
  23.                  Else
  24.                      n = InStr(temp, ".")
  25.                      If n Then                 '与工作表函数不同,不能用n=IIf(n <> 0, Val(Left(temp, n - 1)), 0),当n=0时也进入非当前分支会校验表达式Val(Left(temp, n - 1))的
  26.                         n = Val(Left(temp, n - 1))
  27.                      Else
  28.                         n = 0
  29.                      End If
  30.                  End If
  31.                  If n <> i + 1 Then
  32.                     t = t & temp
  33.                     Selection.MoveDown Unit:=wdParagraph, Count:=1, Extend:=1
  34.                  Else
  35.                     Selection.MoveUp Unit:=wdParagraph, Count:=1
  36.                     Exit Do
  37.                  End If
  38.                Loop
  39.             Else
  40.                If j = 1 Then
  41.                   Exit Do                            '本次的第1个i.就不存在,可以终结查找
  42.                Else
  43.                   Selection.HomeKey Unit:=wdStory
  44.                   i = i + 1
  45.                   j = 1
  46.                   GoTo nexti                    '第j个i.不存在,准备找i+1.,此时待找的为第1个i+1.
  47.                End If
  48.             End If
  49.        End With
  50.        Windows("题目答案配对").Activate
  51.        If j = 1 Then Selection.HomeKey Unit:=wdStory
  52.        With Selection.Find                              '切换到另一文档时,查找参数不能沿用上一文档的,而且with……endwith也许独立出来
  53.             .ClearFormatting
  54.             .Text = "^13(" & i & ".)*^13"
  55.             .Forward = True
  56.             .MatchWildcards = True
  57.             .Execute
  58.             Selection.MoveRight Unit:=wdCharacter, Count:=1
  59.             Selection.InsertAfter t
  60.             Selection.MoveDown Unit:=wdParagraph, Count:=1 '避免插入的i.影响查找下一个
  61.         End With
  62.         j = j + 1                                          '下一个为第j个i.
  63. nexti:
  64.     Loop
  65.     Windows("答案").Activate
  66.     ActiveWindow.Close
  67. End Sub
复制代码

题目答案配对-h.rar

237.52 KB, 下载次数: 26

TA的精华主题

TA的得分主题

发表于 2016-7-24 14:38 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
分级过于混乱随意,给判断各题结束标记人为制造事端!

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-7-25 08:17 | 显示全部楼层
hhjjpp 发表于 2016-7-24 14:38
分级过于混乱随意,给判断各题结束标记人为制造事端!

说的是,所以我想稍微加下排版后再看下,这二份是排了一下的,看是否能实现?

文档.rar

209.78 KB, 下载次数: 18

新文档

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-7-25 08:31 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

10分感谢,但在运行时出现一些报错再现。我现在把文档做了一些前期的处理,把分级和序号等做了一些标准化处理。
比如,加了1、2、4级标题,另外,把所有题目序号都变成了数字加顿号的格式。
看能不能更完美的处理好。

文档.rar

209.78 KB, 下载次数: 8

TA的精华主题

TA的得分主题

发表于 2016-7-26 10:45 | 显示全部楼层
jackyxong 发表于 2016-7-25 08:31
10分感谢,但在运行时出现一些报错再现。我现在把文档做了一些前期的处理,把分级和序号等做了一些标准化 ...
  1. Sub mate()
  2.     Dim path$, i%, j%, n%, t$, sty As Boolean
  3.     path = ThisDocument.path
  4.     Documents.Open path & "\题目答案配对.doc"
  5.     Documents.Open path & "\题目的答案.doc"
  6.     i = 1: j = 1
  7.     Do
  8.        Windows("题目的答案").Activate
  9.        If j = 1 Then Selection.HomeKey Unit:=wdStory     '找第1个i、时才置于文首
  10.        With Selection.Find
  11.            .ClearFormatting
  12.            .Text = "^13(" & i & "、)*^13"
  13.            .Forward = True
  14.            .MatchWildcards = True
  15.            If .Execute Then
  16.               t = Mid(Selection, 2)
  17.               Selection.MoveRight Unit:=wdCharacter, Count:=1
  18.               Selection.MoveDown Unit:=wdParagraph, Count:=1, Extend:=1 '答案包含多段
  19.               Do
  20.                  temp = Selection.Text
  21.                  If temp = Chr(13) Then Exit Do
  22.                  sty = Left(Selection.Style, 2) = "标题"    '该段为标题级别
  23.                  Selection.MoveRight Unit:=wdCharacter, Count:=1
  24.                  If temp = "" Or temp = Chr(13) Or sty Then '至文末
  25.                      n = i + 1
  26.                  Else
  27.                      n = InStr(temp, "、")
  28.                      If n Then                 '与工作表函数不同,不能用n=IIf(n <> 0, Val(Left(temp, n - 1)), 0),当n=0时也进入非当前分支会校验表达式Val(Left(temp, n - 1))的
  29.                         n = Val(Left(temp, n - 1))
  30.                      End If
  31.                  End If
  32.                  If n <> i + 1 Then
  33.                     t = t & temp
  34.                     Selection.MoveDown Unit:=wdParagraph, Count:=1, Extend:=1
  35.                  Else
  36.                     Selection.MoveUp Unit:=wdParagraph, Count:=1
  37.                     Exit Do
  38.                  End If
  39.                Loop
  40.             Else
  41.                If j = 1 Then
  42.                   Exit Do                            '本次的第1个i、就不存在,可以终结查找
  43.                Else
  44.                   i = i + 1
  45.                   j = 1
  46.                   GoTo nexti                    '第j个i、不存在,准备找i+1、,此时待找的为第1个i+1.
  47.                End If
  48.             End If
  49.        End With
  50.        Windows("题目答案配对").Activate
  51.        If j = 1 Then Selection.HomeKey Unit:=wdStory
  52.        With Selection.Find                              '切换到另一文档时,查找参数不能沿用上一文档的,而且with……endwith也许独立出来
  53.             .ClearFormatting
  54.             .Text = "^13(" & i & "、)*^13"
  55.             .Forward = True
  56.             .MatchWildcards = True
  57.             .Execute
  58.             sty = False
  59.             Do
  60.                Selection.MoveRight Unit:=wdCharacter, Count:=1
  61.                Selection.MoveDown Unit:=wdParagraph, Count:=1, Extend:=1
  62.                If Left(Selection.Style, 2) = "标题" Then
  63.                   sty = True
  64.                Else
  65.                   temp = Selection.Text
  66.                   n = InStr(temp, "、")
  67.                   If n Then
  68.                      sty = Val(Left(temp, n - 1)) = i + 1
  69.                   End If
  70.                End If
  71.             Loop Until sty Or temp = Chr(13)          '光标移至下题首或“标题”级别或文末前
  72.             Selection.MoveUp Unit:=wdLine, Count:=1
  73.             Selection.EndKey Unit:=wdLine
  74.             Selection.InsertAfter Chr(13) & t
  75.             Selection.MoveDown Unit:=wdParagraph, Count:=3 '避免插入的i、影响查找下一个
  76.         End With
  77.         j = j + 1                                          '下一个为第j个i、
  78. nexti:
  79.     Loop
  80.     Windows("题目的答案").Activate
  81.     ActiveWindow.Close False
  82. End Sub
复制代码


h.rar

348.5 KB, 下载次数: 13

TA的精华主题

TA的得分主题

发表于 2016-7-26 10:56 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 hhjjpp 于 2016-7-26 10:57 编辑

      在调试过程中,多文档之间用window().activate切换激活真的容易出错,因为携代码的文档会影响到selection的操作(表面上selection的操作代码对目标文档毫无作用,其实是被操作到携代码的文档中去了),因为调试过程中你实际激活的是”题目答案配对-h.doc“,会使想操作的“题目答案配对”和”题目的答案“的激活状态被破坏,就算你的代码实际上无任何问题!
      但是vba又不能建立多个word文档对象、在各文档之间进行切换操作,来替代selection对象的交互,不知大伽们有何良策可分享?

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-7-26 11:43 | 显示全部楼层
hhjjpp 发表于 2016-7-26 10:56
在调试过程中,多文档之间用window().activate切换激活真的容易出错,因为携代码的文档会影响到selec ...

对于VBA我不太懂。
有没有可能用模拟键盘操作在二个文档间切换,但前提是能判断到开始与结束。

TA的精华主题

TA的得分主题

发表于 2016-7-29 16:40 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
摆脱过多的光标操作:
  1. Sub mate()
  2.     Dim path$, i%, j%, n, t$, brr(1 To 300) As String, br
  3.     path = ThisDocument.path
  4.     Documents.Open path & "\题目的答案.doc"
  5.     For j = 1 To ActiveDocument.Paragraphs.Count
  6.         With ActiveDocument.Paragraphs(j).Range 'with允许含变量,但以本行及之前的j值为准
  7.              If Left(.Style, 2) <> "标题" Then  '添加监视ActiveDocument.Paragraphs(j).Range.style
  8.                 n = InStr(.Text, "、")          '添加监视ActiveDocument.Paragraphs(j).Range.Text
  9.                 If n Then
  10.                    n = Left(.Text, n - 1)
  11.                 End If
  12.                 If IsNumeric(n) And n > 0 Then
  13.                    i = i + 1                    '题序
  14.                    If i > 1 Then
  15.                       brr(i - 1) = t            '将上次拼连结果赋值到数组
  16.                    End If
  17.                    t = ""                       '拼连初始化
  18.                 End If
  19.                 t = t & .Text                   '段间拼连
  20.              End If
  21.         End With
  22.     Next
  23.     brr(i) = t                                  '末题赋值
  24.     i = 0: j = 1
  25.     ActiveDocument.Close False
  26.     Documents.Open path & "\题目答案配对.doc"
  27.     Do                                         '由于试题包含图片,答案只能用插入方式,而不能将题目拼连数组和上述答案文本互相掺合
  28.         With ActiveDocument.Paragraphs(j).Range
  29.              n = InStr(.Text, "、")
  30.              If n Then
  31.                 n = Left(.Text, n - 1)
  32.              End If
  33.              If IsNumeric(n) And n > 0 Then     '与excel不同,IsNumeric可识别文本数字
  34.                 i = i + 1
  35.                 If i > 1 Then
  36.                    Selection.HomeKey Unit:=wdStory
  37.                    Selection.MoveDown Unit:=wdParagraph, Count:=j - 2 '按段落绝对序数移动光标
  38.                    br = j - 1
  39.                    Do While Left(ActiveDocument.Paragraphs(br).Range.Style, 2) = "标题" '题末遇标题样式分类文字,答案插入位置需要上移,直至正文
  40.                       Selection.MoveUp Unit:=wdParagraph, Count:=1
  41.                       br = br - 1                                      '用临时变量,避免影响通篇段落搜索的j值
  42.                    Loop
  43.                    Selection.EndKey Unit:=wdLine                       '插入前光标移至行末
  44.                    Selection.InsertAfter Chr(13) & brr(i - 1)
  45.                    Selection.MoveRight Unit:=wdCharacter, Count:=1     '插入答案后要取消选黑状态
  46.                    j = j + 2 + Len(brr(i - 1)) - Len(Replace(brr(i - 1), Chr(13), ""))
  47.                '考虑插入答案后增加了文档段落数,按回车符计算段数,而非用两相邻题收段落序数相减,是因为答案文档夹插了大量、需要扣除的“标题”样式标注
  48.                 Else
  49.                    j = j + 1                                           '首题起始段不需插入操作
  50.                 End If
  51.              Else
  52.                 If j = ActiveDocument.Paragraphs.Count Then            '最后一题无数字结束标记专此处理
  53.                    Selection.EndKey Unit:=wdStory
  54.                    Selection.InsertAfter Chr(13) & brr(i)
  55.                    Selection.MoveRight Unit:=wdCharacter, Count:=1
  56.                    Exit Do
  57.                 Else
  58.                    j = j + 1
  59.                 End If
  60.              End If
  61.         End With
  62.     Loop
  63. End Sub
复制代码

题目答案配对-不用选定-h.rar

171.71 KB, 下载次数: 18

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-8-1 21:36 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
hhjjpp 发表于 2016-7-29 16:40
摆脱过多的光标操作:

非常感谢,经过测试,大部分能成功,但目前有二个地方错位,已经在文档里面标识出来并写出了批注。
另外,路径能改成桌面地址吗?C:\Users\Administrator\Desktop
111.png

题目答案配对.rar

187.75 KB, 下载次数: 16

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

本版积分规则

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

GMT+8, 2025-1-13 10:50 , Processed in 0.027086 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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