不是已经给你回答过了的吗。
.Wrap = wdFindStop
十分感谢您的回答,前面的代码就是用的您给的。我把.Wrap = wdFindStop
后执行替换还是执行了全文替换,不是执行了选定区域的替换,不知何故?再次感谢。
Application.DisplayAlerts=wdAlertsNone'关键代码Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
WithSelection.Find
.Text=ListView1.ListItems(i).Text
.Replacement.Text=ListView1.ListItems(i).SubItems(1)
.Forward=True
.Wrap=wdFindStop''关键代码
.Format=False
.MatchCase=False
.MatchWholeWord=False
.MatchByte=True
.MatchWildcards=False
.MatchSoundsLike=False
.MatchAllWordForms=False
EndWith
Selection.Find.ExecuteReplace:=wdReplaceAll
Application.DisplayAlerts=wdAlertsAll
MsgBox"操作完毕!",vbInformation+vbOKOnly,"消息"
word VBA 查找 替换
Set myRange = ActiveDocument.Content
myRange.Find.Execute FindText:="2", ReplaceWith:="1", Replace:=wdReplaceAll
Set myRange = ActiveDocument.Content
myRange.Find.Execute FindText:="2", ReplaceWith:="1", Replace:=wdReplaceAll
Execute 方法(Find 对象)
运行指定的查找操作。如果查找成功,则返回 True。(这说明其是同步执行)
语法
expression.Execute(FindText, MatchCase, MatchWholeWord, MatchWildcards, MatchSoundsLike, MatchAllWordForms, Forward, Wrap, Format, ReplaceWith, Replace, MatchKashida, MatchDiacritics, MatchAlefHamza, MatchControl)
expression 必需。该表达式返回 Find 对象。
FindText Variant 类型,可选。指定需查找的文本。可用空字符串 ("") 查找格式。也可通过指定适当的字符代码查找特殊字符。例如,“^p”对应段落标记,“^t”对应制表符。如果需要使用特殊字符列表,请参阅查找替换特殊字符和文档元素示例。
如果 MatchWildcards 为 True,则可以指定通配符及其他高级搜索条件。例如,“*(ing)” 将查找以“ing”结尾的所有单词。详细内容,请参阅通配符搜索示例。
若要搜索符号字符,可键入 (^) 字符,零(0),然后键入符号字符的代码。例如,“^0151”对应一条长划线(—)。
MatchCase Variant 类型,可选。如果是 True,则查找文本需区分大小写。相当于“编辑”菜单“查找和替换”对话框中的“区分大小写”复选框。
MatchWholeWord Variant 类型,可选。如果为 True,则只查找匹配的完整单词,而并非作为一个长单词的一部分的文字。相当于“编辑”菜单“查找和替换”对话框中的“全字匹配”复选框。
MatchWildcards Variant 类型,可选。如果为 True,则查找的文字包含特殊搜索操作符。相当于“编辑”菜单“查找和替换”对话框中的“使用通配符”复选框。
MatchSoundsLike Variant 类型,可选。如果为 True,则查找与待查找文字发音相近的单词。相当于“编辑”菜单“查找和替换”对话框中的“同音”复选框。
MatchAllWordForms Variant 类型,可选。如果为 True,则查找文字的所有形式(例如,“ sit” 将包含“sitting”和“sat”)。相当于“编辑”菜单“查找和替换”对话框中的“查找单词的各种形式”复选框。
Forward Variant 类型,可选。如果为 True,则向下(向文档尾部)搜索。
Wrap Variant 类型,可选。如果搜索从不是文档开头的位置开始,并到达文档末尾(如 Forward 设置为 False,则相反),用本参数控制接下来的操作。当在选定内容或区域中没有找到搜索文字时,本参数也控制接下来的操作。可以是下列 WdFindWrap 常量之一:
常量 描述
wdFindAsk 搜索完所选内容或者区域后,Microsoft Word 会显示一条消息,询问是否搜索文档的其他部分。
wdFindContinue 到达搜索区域的开始或者结尾时,继续执行查找操作。
wdFindStop 到达搜索范围的开始或者结尾时,停止执行查找操作。
Format Variant 类型,可选。 如果为 True,则查找格式而非文字。
ReplaceWith Variant 类型,可选。替换文字。要删除由 Find 参数指定的文字,可使用空字符串 ("")。与 Find 参数相似,本参数也可以指定特殊的字符和高级搜索条件。要将图形对象或者其他非文本项指定为替换内容,可将这些项目置于“剪贴板”上,然后将 ReplaceWith 指定为“ ^c”。
Replace Variant 类型,可选。指定执行替换的个数:一个、全部或者不替换。可为下列 WdReplace 常量之一:wdReplaceAll、wdReplaceNone 或 wdReplaceOne。
MatchKashida Variant 类型,可选。如果为 True,则查找结果应与阿拉伯语文档中区分 kashidas 的文本相匹配。由于选择或安装的语言支持不同(例如,美国英语),此参数可能不可用。
MatchDiacritics Variant 类型,可选。如果为 True,则查找结果应与区分音调符号的语言文本相匹配。由于选择或安装的语言支持不同(例如,美国英语),此参数可能不可用。
MatchAlefHamza Variant 类型,可选。如果为 True,则在阿拉伯语文档中,查找内容应与区分 Alef Hamzas 的文本相匹配。由于选择或安装的语言支持不同(例如,美国英语),此参数可能不可用。
MatchControl Variant 类型,可选。如果为 True,则在从右到左运用语言的文档中,查找内容应区分双向控制字符。由于选择或安装的语言支持不同(例如,美国英语),此参数可能不可用。
说明
除非另外指定,否则替换文本将沿用文档中被替换文本的格式。例如,如果用“xyz”替换“abc”,那么粗体“abc”将被粗体字符串“xyz”所替换。
同样,如果 MatchCase 为 False,那么查找到的大写文本将被大写的替换文本替换,而无论搜索文本和替换文本是否大小写。上例中,“ABC”将被“XYZ”替换。
如何用VBA实现WORD批量替换?
Fori=1Ton'n是listview1的行数Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
WithSelection.Find
.Text=ListView1.ListItems(i).SubItems(0)'Findstr=listview1的第i行第1列对应单元格的内容
.Replacement.Text=ListView1.ListItems(i).SubItems(1)'Findstr=listview1的第i行第2列对应单元格的内容
.Forward=True
.Wrap=wdFindContinue
.Format=False
.MatchCase=False
.MatchWholeWord=False
.MatchByte=True
.MatchWildcards=False
.MatchSoundsLike=False
.MatchAllWordForms=False
EndWith
Selection.Find.ExecuteReplace:=wdReplaceAll
ListView1.selectedItem=i
Next
MsgBox"处理完毕!",vbInformation+vbOKOnly,"消息"
ListView1.selectedItem=1
如何用VBA实现WORD批量替换?
操作步骤。
第一,首先将需要批量替换的多个Word文档放在同一文件夹下面。
第二,新建一空白Word文档,右击空白工具栏,单击“控件工具箱”,就可以看到屏幕上调出的控件工具箱。
第三,在控件工具箱上单击“命令按钮”,文档中就放置了一个按钮了。
第四,双击该按钮,进入VB代码编写模式,将以下代码复制进去。
Private Sub CommandButton1_Click()
Application.ScreenUpdating = False
Dim myPas As String, myPath As String, i As Integer, myDoc As Document
With Application.FileDialog(msoFileDialogFolderPicker)
.Title = "选择目标文件夹"
If .Show = -1 Then
myPath = .SelectedItems(1)
Else
Exit Sub
End If
End With
myPas = InputBox("请输入打开密码:")
With Application.FileSearch
.LookIn = myPath
.FileType = msoFileTypeWordDocuments
If .Execute > 0 Then
For i = 1 To .FoundFiles.Count
Set myDoc = Documents.Open(FileName:=.FoundFiles(i), Passworddocument:=myPas)
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = "大家好"
.Replacement.Text = "你好"
.Forward = True
.Wrap = wdFindAsk
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchByte = True
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
myDoc.Save
myDoc.Close
Set myDoc = Nothing
Next
End If
End With
Application.ScreenUpdating = True
End Sub
第五,保存上面代码,退出VB编辑模式,返回Word文档界面。
第六,单击选中该按钮,再单击控件工具箱的第一个按钮“退出设计模式”。
第七,进行测试:点击按钮,选择要放置多个WORD文档所在的文件夹,确定后即可完成!注意如果WORD文档没有加密的话,密码项就不填,直接确认。就会发现该文件夹下面的所有WORD文档中“大家好”已被替换为“你好”了。
关于Word VBA查找替换(含通配符)的问题
< 标识单词开始,也就是说这里要匹配一个整词,前面要么是空格,要么是标点符号等。
(Subject) 匹配“Subject”这个单词。用圆括号括起来的是让它成组,同时本来也可以在替换内容中通过“\1”来指代它。但是我看粘贴出来的代码里面替换内容为空,所以我觉得这个圆括号可有可无。
\\ 匹配“\”这个字符。因为“\”本身在查找控制字符里面具有特殊的控制意义(转义),所以要匹配它自己就必须在前面再加一个“\”进行转义。
* 匹配0到任意多个任意字符
([^11^13]){1} 匹配一个换段符(^13,在文档里面是直接键入ENTER得到)或者一个段内换行符(^11,在文档里面键入SHIFT+ENTER得到)。方括号的意思是匹配方括号里面这个集合中的任意字符。“{n}”表示匹配n次,所以“{1}”就是匹配1次了。至于那个圆括号,和上面提到的圆括号的功能相同,同样我觉得这里使用是多余的。
整句话的意思,就是要找到形如“Subject\ajdslfjasdlf”文字,且它后面必须是一个换段或者段内换行。
__________________
补充:
楼主说的没错,^11^13在这里是可以理解成或者的关系。
请问楼主提到的需求中,title后面是不是一定会有一个回车?
如果是这样的话,可以直接在Word查找替换对话框中用这个查找串: <Subject*\\<([!\\]@)[^11^13] ,替换为:\1 。
选中通配符后做全部替换即可。
应该是不需要VBA的吧?楼主可以先试试看,如果不行我再想办法。
___________________
再补充:
([!\\]@) 的意思就是匹配一个不包含“\”(这个由“[!\\]”来控制)的字符串,这个字符串由至少一个字符组成(这个由“@”来控制)。
所以,我的整个查找串的意思就是,查找一个“Subject”开头,后面有若干字符,最后一个反斜杆的后面有一个字符串,再往后就是一个回车。
当然,如果不想用通配符,当然自己写代码也是能做到了。但是就得自己去分析整个字符串,会需要考虑很多因素和可能的变化,代码会写得很复杂。此外,Word查找替换的通配符,是Word中很重要的一个功能,掌握它能够为平时的工作带来的很大便利。所以还是值得去研究一下的。
其实我就是看Word自带的帮助啊……在Word里面键入F1,然后输入关键字“查找替换”,好象返回的第一条就是我看的那个帮助,里面有这些控制符号的解释。
不过Word的查找替换对于模糊查询的支持总的来说还是比较弱。要想做到更精确、更复杂的搜索条件,还是需要用到正则表达式。这个可以在网上搜索一下“VBA 正则表达式”。
VBA如何调出word和excel查找/替换对话框
VBA中,可以利用下面的语句来调用Excel内置对话框:
Application.Dialogs(代码).Show
其中代码与对话框名称对应表如下:
代码 窗口名称 代码 窗口名称 代码 窗口名称 代码 窗口名称 代码 窗口名称
1 打开 54 删除单元格 190 字体 320 选项-视图 496 标签区域
2 编辑链接 55 插入 191 合并计算 321 加载宏 509 工作表背景
5 另存为 61 定义名称 192 排序 323 附加工具栏 525 数据有效性
6 删除文档 62 指定名称 198 单变量求解 342 插入图片 583 条件格式
7 页面设置 63 定位 199 编辑成组工作表 354 插入 596 插入超链接
8 打印内容 64 查找 203 创建组 355 选项-123的帮助 620 保护共享工作簿
9 打印机设置 84 单元格格式-图案 212 样式 356 选项-常规 647 选项-国际
12 重排窗口 91 分列 220 自定义 370 高级筛选 653 发布为网页
17 宏 94 取消隐藏 222 打印预览 381 单元格格式-字体 656 拼音属性
23 设置打印标题 95 工作区选项 229 样式 384 取消隐藏 666 导入文本文件
26 字体 103 激活 256 显示比例 386 重命名工作表 667 新建-Web_查询
27 显示选项 108 复制图片 259 对象 415 分类汇总 674 Web-选项-常规
28 保护工作表 110 定义名称 269 自动套用格式 417 保护工作簿 683 Web-选项-浏览器
32 重算选项 111 单元格格式-数字 276 自定义 447 自动筛选 684 Web-选项-文件
39 排序 119 新建 281 移动或复制工作表 450 插入函数 685 Web-选项-图片
40 序列 127 行高 282 移动或复制工作表 458 选项-自定义序列 686 Web-选项-编码
41 模拟运算表 130 替换 283 移动或复制工作表 472 标准列宽 687 Web-选项-字体
42 单元格格式-数字 132 定位条件 284 重命名工作表 473 合并方案 709 公式求值
43 单元格格式-对齐 134 字体 285 保存工作区 474 工作簿属性 731 基本文件搜索
44 字体 137 拆分 302 插入 475 打开 753 选项-保存
45 单元格格式-边框 142 设置 305 方案管理器 476 单元格格式-字体 755 选项-拼写检查
46 单元格格式-保护 145 另存为 307 添加方案 481 共享工作簿 771 符号
47 列宽 150 字体 312 数据透视表和数据透视图向导 485 自动更正 773 Web-选项-浏览器
52 清除 154 插入批注 318 选项-重新计算 493 视图管理器 796 创建列表
53 选择性粘贴 161 选项-颜色 319 选项-编辑 494 添加视图 817 信息检索
Word VBA如何实现有规律的批量查找替换
Sub QY()
'
' 宏在 2014-4-24 由 QY
'
x = "3.1.1-51"
y = "3.1.1-50"
Selection.Find.ClearFormatting
For i = 1 To 50
With Selection.Find
.text = x
.Replacement.text = y
.Forward = True
End With
Selection.Find.Execute Replace:=wdReplaceOne
Selection.MoveRight Unit:=wdCharacter, Count:=1
y = x
x = "3.1.1-" & Val(Right(x, 2)) + 1
Next
End Sub
word 如何利用vba实现批量替换字符?
录制宏,替换所有的1都替换为key“1”,然后在代码里面复制(所有的1都替换为key“1”)修改为其他替换。
转载请注明出处51数据库 » word替换vba 如何用VBA实现WORD批量替换