ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 同一个word文档内不同文本替换不同文本的VBA

[复制链接]

TA的精华主题

TA的得分主题

发表于 2020-2-16 08:44 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
公司系统有点傻,导出的项目命名只能是订单1、订单2、订单3等

但是出版的时候,要把这些个根据订单的名字重新命名,少了还好,一旦多了,纯手工是个无脑的体力劳动,还容易出错。
想求一个代码,支持word内不同文本替换不同文本,文本逐行对应来替换
我上传2个例子,用文档示例2中的文本逐行对应替换文档示例1中的文本。
文档示例1肯定在word格式,至于文档示例2中的文字,可以在word、记事本或者excel均可

有工具、代码都可以,可以支持收费,谢谢了。


文档示例.rar

18.7 KB, 下载次数: 13

TA的精华主题

TA的得分主题

发表于 2020-2-16 09:17 来自手机 | 显示全部楼层
用代码吧,不过实际文件就是这样简单纯粹的吗?

TA的精华主题

TA的得分主题

发表于 2020-2-16 09:20 | 显示全部楼层
Sub 批量替换()
    Application.DisplayAlerts = False
    Dim rg As Range, arrold, arrnew, i As Integer
    Set rg = ActiveDocument.Range
    arrold = Array("6", "2", "3")
    arrnew = Array("六", "二", "三")
    If UBound(arrold) <> UBound(arrnew) Then MsgBox "替换与被被替换词量不对称,程序退出": Exit Sub
    For i = 0 To UBound(arrold)
        rg.Find.ClearFormatting
        rg.Find.Replacement.ClearFormatting
        With rg.Find
            .Text = arrold(i)
            .Replacement.Text = arrnew(i)
            .Execute Replace:=wdReplaceAll
        End With
        rg = ActiveDocument.Range
    Next
    Application.DisplayAlerts = True
End Sub
原来的,两个数组的来源改成从2个文档读取,split后得到即可。自己改下吧。

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-2-16 09:25 | 显示全部楼层
实际的文档除了这字,就是图片,基本上就是这个东西

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-2-16 10:06 | 显示全部楼层
本帖最后由 snow653124 于 2020-2-16 10:07 编辑
daibao88 发表于 2020-2-16 09:20
Sub 批量替换()
    Application.DisplayAlerts = False
    Dim rg As Range, arrold, arrnew, i As Int ...

谢谢 我试试代码基础几乎为0
我百度一点一点试试

TA的精华主题

TA的得分主题

发表于 2020-2-20 17:43 | 显示全部楼层
本帖最后由 weiyingde 于 2020-2-20 19:41 编辑
snow653124 发表于 2020-2-16 10:06
谢谢 我试试代码基础几乎为0
我百度一点一点试试

如果两个的顺序一致,那就填没有意思的。
Sub 群体替换()Dim arr, brr, idoc As Document, xdoc As Document
With ActiveDocument.Content
     .Find.Execute "^13^13", , , , , , , , , "^p", 2
     arr = Split(.Text, Chr(13))
End With
Set idoc = Documents.Open(ThisDocument.Path & "\" & "替换的顺序.doc")
brr = Split(idoc.Content, Chr(13))
idoc.Close False
Set xdoc = Documents.Open(ThisDocument.Path & "\" & "被替换的文档.doc")
With xdoc
     For i = 1 To .Paragraphs.Count
        For j = 0 To UBound(arr) - 1
            With .Paragraphs(i)
                 If Left(.Range.Text, Len(.Range.Text) - 1) = brr(j) Then
                   '.Range = arr(j) & Chr(13)
                   xdoc.Range(.Range.Start, .Range.Start + Len(.Range.Text) - 1) = arr(j)
                 End If
            End With
        Next
    Next
End With
xdoc.Save
xdoc.Close
End Sub
如果合适,赏朵小花。
附件如下:

替代试试.rar

35.69 KB, 下载次数: 9

TA的精华主题

TA的得分主题

发表于 2020-2-20 20:14 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
若被替换的文档中被替换的词语位于该段不同位置,又该如何。
提示:每一段有一个被替换的词语。
见附件中被替换的文档。

来一点难度如何.rar

29.15 KB, 下载次数: 12

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-6-26 14:27 | 显示全部楼层
weiyingde 发表于 2020-2-20 20:14
若被替换的文档中被替换的词语位于该段不同位置,又该如何。
提示:每一段有一个被替换的词语。
见附件中 ...

万分感谢了

TA的精华主题

TA的得分主题

发表于 2020-7-1 10:29 | 显示全部楼层
weiyingde 发表于 2020-2-20 20:14
若被替换的文档中被替换的词语位于该段不同位置,又该如何。
提示:每一段有一个被替换的词语。
见附件中 ...

附件中“被替换的文档 .doc”点之前多了个空格,与代码中的名称不符,运行是会报错。
另外,运行后被替换的文档并未发生变化,也就是说没有被替换,不知何故?

TA的精华主题

TA的得分主题

发表于 2020-7-2 18:48 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
lisga1103 发表于 2020-7-1 10:29
附件中“被替换的文档 .doc”点之前多了个空格,与代码中的名称不符,运行是会报错。
另外,运行后被替 ...

Sub 这个试试()
Dim arr, brr, idoc As Document, xdoc As Document
With ActiveDocument.Content
     .Find.Execute "^13^13", , , , , , , , , "^p", 2
     arr = Split(.Text, Chr(13))
End With
Set idoc = Documents.Open(ThisDocument.Path & "\" & "替换的顺序.doc")
brr = Split(idoc.Content, Chr(13))
idoc.Close False
Set xdoc = Documents.Open(ThisDocument.Path & "\" & "被替换的文档.doc")
For Each br In brr
   N = N + 1
   With xdoc.Content.Find
        Do While .Execute(br)
                 With .Parent
                      If .Text = br Then .Text = arr(N - 1)
                      .Collapse 0
                 End With
        Loop
  End With
Next
End Sub

可以的话,赏多小花。

评分

1

查看全部评分

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

本版积分规则

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

GMT+8, 2024-11-24 07:57 , Processed in 0.039543 second(s), 15 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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