ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[转帖] Word简易查找替换器

[复制链接]

TA的精华主题

TA的得分主题

发表于 2019-11-1 22:19 | 显示全部楼层 |阅读模式
Private Type CHOOSECOLOR 'http://www.exceltip.net/thread-5644-1-1.html
lStructSize As Long
hwndOwner As Long
hInstance As Long
rgbResult As Long
lpCustColors As Long
flags As Long
lCustData As Long
lpfnHook As Long
lpTemplateName As Long
End Type
Private Type RGBColor
    R As Byte
    G As Byte
    B As Byte
    space As Byte  '用作间隔
End Type
Private Declare Function ChooseColorA Lib "Comdlg32" (pChoosecolor As CHOOSECOLOR) As Long
Dim CustColors(1 To 16) As RGBColor



Sub 批量文件多个关键词替换()
Dim arr(), brr(), ra As Range
Dim ta As Table
    Set ta = ActiveDocument.Tables(1)
    i = 0
    For R = 2 To ta.Rows.Count
        If Replace(Replace(ta.Cell(R, 1).Range.Text, Chr(13), ""), Chr(7), "") = "" Then Exit For
        ReDim Preserve arr(i)
        ReDim Preserve brr(i)
        arr(i) = Replace(Replace(ta.Cell(R, 1).Range.Text, Chr(13), ""), Chr(7), "")
        brr(i) = Replace(Replace(ta.Cell(R, 2).Range.Text, Chr(13), ""), Chr(7), "")
        i = i + 1
    Next
    If ActiveDocument.InlineShapes(3).OLEFormat.Object = True Then
        tf1 = 1
    Else
        tf1 = 0
    End If
    If ActiveDocument.InlineShapes(4).OLEFormat.Object = True Then
        tf2 = 1
    Else
        tf2 = 0
    End If
    With Application.FileDialog(msoFileDialogFilePicker)
        If .Show <> -1 Then Exit Sub
        For Each f In .SelectedItems
            处理文档 f, arr, brr, tf1, tf2
        Next
    End With
    MsgBox "恭喜,已完成!"
End Sub
Sub 文件夹下word文档替换()
On Error GoTo ext:
Dim arr(), brr(), ra As Range
Dim ta As Table
    Set ta = ActiveDocument.Tables(1)
    i = 0
    For R = 2 To ta.Rows.Count
        If Replace(Replace(ta.Cell(R, 1).Range.Text, Chr(13), ""), Chr(7), "") = "" Then Exit For
        ReDim Preserve arr(i)
        ReDim Preserve brr(i)
        arr(i) = Replace(Replace(ta.Cell(R, 1).Range.Text, Chr(13), ""), Chr(7), "")
        brr(i) = Replace(Replace(ta.Cell(R, 2).Range.Text, Chr(13), ""), Chr(7), "")
        i = i + 1
    Next
    If ActiveDocument.InlineShapes(3).OLEFormat.Object = True Then
        tf1 = 1
    Else
        tf1 = 0
    End If
    If ActiveDocument.InlineShapes(4).OLEFormat.Object = True Then
        tf2 = 1
    Else
        tf2 = 0
    End If
    For Each f In DIR数组遍历

            处理文档 f, arr, brr, tf1, tf2

    Next
    MsgBox "恭喜,已完成!"
ext:

End Sub
Sub t()
For Each ra In ActiveDocument.StoryRanges
                If Len(Trim(ra)) > 2 Then
                    '                    ra.Find.Execute arr(i), , , tf1, , , , , , brr(i), 2
                    Do While ra.Find.Execute(5, , , 0)

                        ra.Find.Parent.Select
                        ra.Find.Execute 5, , , 0, , , , , , 1, 1
                        ra.Find.Parent.Font.Color = Label1.ForeColor
                        ra.Text = 1
                        ra.Find.Parent.Collapse 0
                    Loop
                    End If
                    Next
ActiveDocument.Range.Find.Execute 5, , , 0, , , , , , 1, 1
End Sub
Sub 处理文档(f, arr, brr, tf1, tf2)
On Error GoTo ext:
Dim ra As Range
    With Documents.Open(f, Visible:=1)
    Application.ScreenUpdating = False
        If tf2 = 1 Then .Range.Find.Execute "[^11^13][  ^t" & ChrW(160) & "^11^13]{1,}", , , 2, , , , , , "^p", 2
        For i = 0 To UBound(arr)
            For Each ra In .StoryRanges
                If Len(Trim(ra)) > 2 Then
                    '                    ra.Find.Execute arr(i), , , tf1, , , , , , brr(i), 2
                    Do While ra.Find.Execute(arr(i), , , tf1)

'                        ra.Find.Parent = brr(i)
                        ra.Find.Execute arr(i), , , tf1, , , , , , brr(i), 1
                        ra.Find.Parent.Font.Color = Label1.ForeColor
                        If tf1 = 0 Then ra.Text = brr(i)
                        ra.Find.Parent.Collapse 0
                    Loop
                    ra.Find.Execute arr(i), , , tf1, , , , , , brr(i), 2
                End If
            Next
        Next
        Application.ScreenUpdating = True
        .Close True
    End With
ext:
End Sub


Function DIR数组遍历()
Dim d1 As Object, arr(), brr()
With Application.FileDialog(msoFileDialogFolderPicker)
    If .Show = -1 Then fod = .SelectedItems(1) & "\" Else Exit Function
End With
ReDim Preserve brr(0)
brr(0) = fod
        js = 0   '词典计数器,起到类似递归的作用,随着不断的增加,逐渐深入到新加入的目录中;
    Do While js < UBound(brr) + 1  '第几个i就是进入第几个文件夹!i从0开始。d1.count为找到的文件夹总数。

        ML = Dir(brr(js), vbDirectory)
        Do While ML <> ""
            If ML <> "." And ML <> ".." Then '这两个点,一个代表本目录,另一个代表上级目录parent,dir方式总会有
                If (GetAttr(brr(js) & ML) And vbDirectory) = vbDirectory Then    '第一个括号必须有
                j = j + 1
                ReDim Preserve brr(j)
                   brr(j) = brr(js) & ML & "\"

                Else
                    If InStr(ML, "doc") > 0 And InStr(ML, "$") = 0 Then
                         ReDim Preserve arr(i)
                         arr(i) = brr(js) & ML
                         i = i + 1
                    End If
                End If
            End If
            ML = Dir()
        Loop
        js = js + 1
    Loop
    DIR数组遍历 = arr
End Function



Private Sub CommandButton1_Click()
    批量文件多个关键词替换
End Sub

Private Sub CommandButton2_Click()
    文件夹下word文档替换
End Sub

Private Sub Label1_Click()
Dim CColor As CHOOSECOLOR
With CColor
.lStructSize = Len(CColor) '结构长度
.lpCustColors = VarPtr(CustColors(1)) '存储自定义颜色的缓冲区地址,CustColors为公共变量,用于保存自定义颜色,以便于用户下一次打开调色板时仍能够使用前一次的自定义颜色
End With
If ChooseColorA(CColor) = 0 Then Exit Sub   '等于0表示按下了取消键
Label1.ForeColor = CColor.rgbResult
End Sub


TA的精华主题

TA的得分主题

 楼主| 发表于 2019-11-2 09:36 | 显示全部楼层
我存的草稿怎么给发表了?
请问:怎么编辑自己发的贴子,没找到入口。
我需要将已解决的改下标题,将本贴设为草稿,谢谢

TA的精华主题

TA的得分主题

发表于 2019-11-2 21:39 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
第一次见自己的草稿带注释网址的 'http://www.exceltip......
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-24 17:04 , Processed in 0.025284 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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