ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 麻烦大佬帮忙看下excel中调用word的查找替换方法为什么没有成功。

[复制链接]

TA的精华主题

TA的得分主题

发表于 2025-1-10 20:28 | 显示全部楼层 |阅读模式
Sub 合同草拟()
    Dim wordApp As Object
    Set wordApp = CreateObject("Word.Application") '---这里创建了一个空的Word.Application对象
    wordApp.Visible = True
    Dim wordDoc As Object
    Set wordDoc = wordApp.Documents
    Dim newDoc As Object
    wordDoc.Open "C:\Users\10127\Desktop\VBA-合同草拟APP开发\P-模板-8.4 技术服务合同(2023版).docx"
    wordApp.Selection.WholeStory '---Selection.WholeStory、WordDoc.Selection.WholeStory均不行,可见selection对象是直接挂接在Word.Application对象下的
    wordApp.Selection.Copy
    'wordDoc.Add
    'wordApp.Selection.Paste

    Dim exfdRng As Range
    Dim colCTname, colCTBunit, colCTmoney, colCTrate, colCTdraf, rowCTdraf As Integer
    Dim firstAddress As String

    With Worksheets("服务合同").UsedRange
        Set exfdRng = .Find("项目名称", LookIn:=xlValues)
        If Not exfdRng Is Nothing Then
            exfdRng.Select
            colCTname = exfdRng.Column
        End If

        Set exfdRng = .Find("乙方单位", LookIn:=xlValues)
        If Not exfdRng Is Nothing Then
            exfdRng.Select
            colCTBunit = exfdRng.Column
        End If

        Set exfdRng = .Find("中标金额(含税)", LookIn:=xlValues)
        If Not exfdRng Is Nothing Then
            exfdRng.Select
            colCTmoney = exfdRng.Column
        End If

        Set exfdRng = .Find("中标税率", LookIn:=xlValues)
        If Not exfdRng Is Nothing Then
            exfdRng.Select
            colCTrate = exfdRng.Column
        End If

        Set exfdRng = .Find("合同编号", LookIn:=xlValues)
        If Not exfdRng Is Nothing Then
            exfdRng.Select
            colCTdraf = exfdRng.Column
            rowCTdraf = exfdRng.Row
        End If

    End With

    Dim j As Variant

    j = ThisWorkbook.Worksheets("服务合同").Cells(rowCTdraf, colCTdraf).Value
    Do While ThisWorkbook.Worksheets("服务合同").Cells(rowCTdraf, colCTdraf).Value <> ""

        If ThisWorkbook.Worksheets("服务合同").Cells(rowCTdraf, colCTdraf).Value = "草拟" Then
            Set newDoc = wordDoc.Add

            wordApp.Selection.Paste
            newDoc.Activat
            With newDoc.Content.Find
                .ClearFormatting
                .Text = "$项目名称$"
                .Replacement.ClearFormatting
                .Replacement.Text = "123"
                .Execute Replace:=wdReplaceAll, Forward:=True, Wrap:=wdFindContinue
            End With
        End If
        rowCTdraf = rowCTdraf + 1
    Loop
End Sub

以上是测试代码,标红的部分没有成功替换。使用的是后绑定。vba使用WPS自带的VBA。
麻烦大佬帮忙指导,感谢啦。

TA的精华主题

TA的得分主题

发表于 2025-1-10 22:45 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
把wdReplaceAll换成2
把wdFindContinue换成1试试。

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2025-1-10 22:55 | 显示全部楼层
chxw68 发表于 2025-1-10 22:45
把wdReplaceAll换成2
把wdFindContinue换成1试试。

为啥换成数字就可以了呢?

TA的精华主题

TA的得分主题

发表于 2025-1-10 23:14 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2025-1-10 23:49 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
TheDoctor 发表于 2025-1-10 22:55
为啥换成数字就可以了呢?

在Excel VBA环境下 不认识word VBA定义的常量wdFindContinue ,但是你用常量的值数字它认识,二者等价
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2025-1-16 17:27 , Processed in 0.022099 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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