ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[原创]一次多条件替换

[复制链接]

TA的精华主题

TA的得分主题

发表于 2005-2-2 15:01 | 显示全部楼层 |阅读模式

使用场合:同时进行多个查找与替换,支持非通配符下的特殊字符的替换。

比如,适用于ISO文件,因组织机构调整,对所有原有部门一次输入后替换为新部门。

查找的各个内容之间,用英文逗号分隔(","),查找数量不限。

替换的各个内容之间,用英文逗号分隔(","),替换数量必须等同于查找数量,如是删除某个查找内容,替换中键入""(空空)

以下代码供参考:

'* +++++++++++++++++++++++++++++
'* Created By I Love You_Word!@ExcelHome 2005-2-2 14:54:39
'
仅测试于System: Windows NT Word: 10.0 Language: 2052
'^The Code CopyIn [ThisDocument-ThisDocument]^'
'*
-----------------------------

Private Sub Document_Close()
    On Error Resume Next
    Application.CommandBars("Edit").Controls("多个替换").Delete    '恢复原有菜单
End Sub
'----------------------
Private Sub Document_Open()
    On Error Resume Next
    Dim NewButton As CommandBarButton
    CustomizationContext = ActiveDocument '将自定义组合键和工具命令保存于活动文档中
    '指定CTRL+F为键盘快捷方式
    KeyBindings.Add wdKeyCategoryMacro, "MySub", BuildKeyCode(wdKeyControl, wdKeyF)
    '指定F5为快捷方式
    KeyBindings.Add wdKeyCategoryMacro, "MySub", BuildKeyCode(wdKeyF5)
    Application.CommandBars("Edit").Controls("多个替换").Delete    '预防性删除
    Set NewButton = Application.CommandBars("Edit").Controls.Add(Type:=msoControlButton, Before:=11)
    With NewButton
        .Caption = "多个替换"    '命令名称
        .FaceId = 100    '命令的FaceId
        .Visible = True    '可见
        .OnAction = "MySub"    '指定响应过程名
    End With
End Sub
'----------------------
Sub MySub()
    UserForm1.Show
End Sub
'----------------------
Sub ComReset()   '恢复默认设置
    Application.CommandBars("Edit").Reset
End Sub
'----------------------

'* +++++++++++++++++++++++++++++
'* Created By I Love You_Word!@ExcelHome 2005-2-2 14:54:59
'
仅测试于System: Windows NT Word: 10.0 Language: 2052
'^The Code CopyIn [
用户窗体-UserForm1]^'
'*
-----------------------------

Private Sub CommandButton1_Click()
    Me.TextBox1 = ""
    Me.TextBox2 = ""
    Me.TextBox1.SetFocus
End Sub
'----------------------
Private Sub CommandButton2_Click()
    Dim MyFind() As String, MyRep() As String, i As Integer, aStory As Variant
    On Error Resume Next
    '检查是否为空
    If Me.TextBox1 = "" And Me.TextBox2 = "" Then Exit Sub
    '定义两个数组,以","分隔
    MyFind = Split(Me.TextBox1, ",")
    MyRep = Split(Me.TextBox2, ",")
    If UBound(MyRep) <> UBound(MyFind) Then
        '如果两个文本框的分隔数目不一致,提示
        MsgBox "替换的数目与查找数目不一致!", vbExclamation + vbOKOnly, "Warnning"
        Me.TextBox2.SetFocus
        Exit Sub
    End If
    Application.ScreenUpdating = False
    With ActiveDocument
        For i = 0 To UBound(MyFind)    '一个从下标为0的循环替换
            For Each aStory In .StoryRanges    '在文档的各个文字部分
                '如果是"",则相当于删除原查找内容
                aStory.Find.Execute findtext:=MyFind(i), _
                                    replacewith:=VBA.IIf(MyRep(i) = """""", "", MyRep(i)), Replace:=2
                '如果有下一节中相同内容文字部分,也进行替换
                If Not aStory.NextStoryRange Is Nothing Then _
aStory.NextStoryRange.Find.Execute findtext:=MyFind(i), _
                                    replacewith:=VBA.IIf(MyRep(i) = """""", "", MyRep(i)), Replace:=2
            Next
        Next
    End With
    Application.ScreenUpdating = True
    Unload Me    '卸载窗体
End Sub
'----------------------
Private Sub UserForm_Initialize()
    Me.Caption = "多文本替换操作"
    Me.TextBox1.SetFocus
    Me.CommandButton2.Default = True
End Sub
'----------------------
存在问题:

可能对于多分节文档中(超过二节)的页眉页脚和脚注、尾注等的非同前文字部分,会替换不到。

有空我再做一个集中替换,即对某个文件夹中的所有文件进行一次性替换。

请大家多提意见以便修改。

rH7z06UW.zip (17.97 KB, 下载次数: 517)
[此贴子已经被konggs于2006-8-23 17:44:38编辑过]

TA的精华主题

TA的得分主题

发表于 2005-2-2 15:24 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
得好好用用,多谢

TA的精华主题

TA的得分主题

发表于 2005-2-2 19:50 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2005-2-2 20:38 | 显示全部楼层

[讨论]

很好用谢谢,但是不支持CTRL+C和CTRL+V。

TA的精华主题

TA的得分主题

 楼主| 发表于 2005-2-4 07:22 | 显示全部楼层

这是一个批量多文件(全文件夹)的多文本一次性替换操作。

运行本程序后,先输入需查找和与之对应的替换的文本,然后点击“选择文件夹”,您可以找到指定的文件夹中的部分或者所有文件,注意,您需要全选文件(CTRL+A),或者使用SHIFT/CTRL配合鼠标键选取多个文件),确定后自动进行批量替换。

b4nbM776.zip (14.26 KB, 下载次数: 323)

TA的精华主题

TA的得分主题

发表于 2006-8-23 10:21 | 显示全部楼层
QUOTE:
以下是引用守柔在2005-2-4 7:22:00的发言:

这是一个批量多文件(全文件夹)的多文本一次性替换操作。

运行本程序后,先输入需查找和与之对应的替换的文本,然后点击“选择文件夹”,您可以找到指定的文件夹中的部分或者所有文件,注意,您需要全选文件(CTRL+A),或者使用SHIFT/CTRL配合鼠标键选取多个文件),确定后自动进行批量替换。


好需要這個程序啊,可下載了只有一個WORD檔,里面就

“批量多条件一次性替换”

這一句話,我是不是哪里操作不對啊,謝謝守柔

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-8-23 11:19 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2006-8-23 13:49 | 显示全部楼层
QUOTE:
以下是引用守柔在2006-8-23 11:19:00的发言:
按下CTRL+H试一下。

按下後出現尋找與替換畫面如圖,可我不知怎麼去操作,如在哪里輸入需查找和與之對應的替換文本,“選擇文件夾”在哪個位置啊,可以教我怎麼運作嗎,謝謝版主了!


[此贴子已经被作者于2006-8-23 13:51:32编辑过]
lkrGENdR.jpg

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-8-23 17:22 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

电脑重装中.....

TA的精华主题

TA的得分主题

发表于 2006-8-23 17:40 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-15 01:58 , Processed in 0.051026 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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