ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 出错:答案从Excel分别回灌到word文档相对位置

[复制链接]

TA的精华主题

TA的得分主题

发表于 2017-8-21 23:14 | 显示全部楼层 |阅读模式
本帖最后由 weiyingde 于 2017-8-21 23:16 编辑

要求:答案从Excel分别回灌到word文档相对位置‘
问题:错误地将Excel所有答案回灌word文档第一个位置。
代码如下:
Sub 文档回灌()
Dim xlapp As New Excel.Application, arr
n = 0 '给题和题枝干加别加题号编号
With ActiveDocument
     For Each par In .Paragraphs
         If Len(par) > 1 Then n = n + 1
     Next
     For i = 2 To n
        If (i - 2) Mod 5 = 0 Then
           tx1 = .Paragraphs(i).Range.Text
           .Paragraphs(i).Range.Text = 1 + Int((i - 2) / 5) & "." & tx1
        Else
           ys = (i - 2) Mod 5
           tx2 = .Paragraphs(i).Range.Text
           .Paragraphs(i).Range.Text = Chr(64 + ys) & "、" & tx2
        End If
    Next
With xlapp.Workbooks.Open(Left(.FullName, Len(.FullName) - 4) & "xlsx").ActiveSheet
         arr = .Range("G1:G" & .Cells(65536, 7).End(xlUp).Row)
     End With
     xlapp.Quit
    .Range(0, Len(.Paragraphs(1).Range.Text) - 1) = Left(.Name, Len(.Name) - 5)
End With

ActiveDocument.Content.Find.Execute "([\((])[" & ChrW(12288) & ChrW(32) & ChrW(160) & "]{1,}([)\)])", , , 1, , , , , , "\1\2", 2
With ActiveDocument.Content.Find '回灌答案
     Do While .Execute("\][\((]", , , 1)
        txt$ = .Parent.Text
         k = k + 1
        .Parent.Text = txt$ & arr(k , 1)
     Loop
End With
End Sub
注意,附件代码中红字部分笔误了,特此提醒。

从Excel答案回灌word文档.rar

27.63 KB, 下载次数: 19

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-8-22 08:00 | 显示全部楼层
再求大侠援助,在线等。

TA的精华主题

TA的得分主题

发表于 2017-8-22 08:55 | 显示全部楼层
weiyingde 发表于 2017-8-22 08:00
再求大侠援助,在线等。

          在      .Parent.Text = txt$ & arr(k, 1)    这句后面 加一句 如下代码:
            .Parent.Collapse 0

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-8-22 08:58 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
duquancai 发表于 2017-8-22 08:55
在      .Parent.Text = txt$ & arr(k, 1)    这句后面 加一句 如下代码:
            .Pare ...

谢谢,这个collapse,不好理解,到现在还没搞懂

TA的精华主题

TA的得分主题

发表于 2017-8-22 09:13 来自手机 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 duquancai 于 2017-8-22 09:18 编辑
weiyingde 发表于 2017-8-22 08:58
谢谢,这个collapse,不好理解,到现在还没搞懂


另一种说法:改变指针的指向

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-8-22 09:24 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 weiyingde 于 2017-8-22 09:28 编辑
duquancai 发表于 2017-8-22 09:13
说得专业一点:改变指针

我理解为“遮盖”。
Do While .Execute("\][\((]", , , 1)
        txt$ = .Parent.Text
         k = k + 1
        .Parent.Text = txt$ & arr(k , 1)
     Loop
我理解为,搜到一个符合要求的第一个地方,然后用第一个 txt$ & arr(k , 1)的值来替换,直到替换搜有的
可为什么老在原地方替换,而没有继续往后搜索呢并相应地替换呢?是Do While ……loop循环的问题,还是在word本身的特殊性呢?

TA的精华主题

TA的得分主题

发表于 2017-8-22 09:29 来自手机 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
weiyingde 发表于 2017-8-22 09:24
我理解为“遮盖”。
Do While .Execute("\][\((]", , , 1)
        txt$ = .Parent.Text

没有那么多的空闲时间来为你解释复杂的理论

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-8-22 09:40 | 显示全部楼层
duquancai 发表于 2017-8-22 09:29
没有那么多的空闲时间来为你解释复杂的理论

杜老师请便。
已经浪费了你够多的时间了,谢谢你!
若有时间,还要向你请教。
跟你学了不少知识,也掌握了一些word的技能。

TA的精华主题

TA的得分主题

发表于 2017-8-23 21:07 | 显示全部楼层
weiyingde 发表于 2017-8-22 09:40
杜老师请便。
已经浪费了你够多的时间了,谢谢你!
若有时间,还要向你请教。

给杜大侠发点辛苦费………………

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-8-24 08:04 | 显示全部楼层
首先感谢杜大虾,也要感谢你,虽不曾给你们什么报酬,祈愿好人一生平安!!!
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2025-1-12 18:39 , Processed in 0.024682 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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