vba - 如何在 Word 中的 VBA 中的一个函数中搜索多个单词?
问题描述
我有一个宏,它可以搜索一个单词(“January”)并将其旁边的空间转换为受保护的空间。我想做的是搜索一年中的其他月份。有没有办法在同一个函数中搜索其他月份,而不是复制和粘贴我的代码 11 次,每次都搜索不同的月份?到目前为止,这是我的代码。我只对更改搜索文本行感兴趣,如果可能的话,因为其余的工作正常而且我不太擅长 VBA,基本上其他任何事情都会很快变得太混乱哈哈。
我有另一个搜索功能,它的功能相同,但跟随任何数字(“([0-9])”)并且有效,我只想将 12 个潜在的搜索功能缩短为一个。
Dim sFindText As String
sFindText = "January "
Selection.Find.Execute sFindText
Do Until Selection.Find.Found = False
Selection.MoveRight Unit:=wdCharacter, Count:=1
Selection.TypeBackspace
Selection.TypeText Text:=" "
Selection.Find.Execute
Loop
End Sub
解决方案
以下代码适用于我。
它首先将月份名称放入一个数组中。在数组的循环中,每个名称与要搜索FindMonths
的对象一起发送到过程。Range
将需要重复的代码放在自己的程序中,就不必再输入了。
请注意该Find
过程如何与Range
(而不是Selection
对象)一起使用。通常,使用范围而不是选择更可靠地跟踪正在发生的事情。
另请注意,在处理一个“找到”之后,如何将Range
其设置为从找到一个月的一个实例后的点延伸到文档的末尾。这样可以确保找到一个月的所有实例,而不仅仅是第一个实例。
Sub ProcessMonths()
Dim sFindText As String
Dim aMonths As Variant
Dim i As Long
aMonths = Array("January", "February", "March", "April", "May", "June", "July", "August", _
"September", "October", "November", "December")
For i = LBound(aMonths) To UBound(aMonths)
sFindText = aMonths(i)
FindMonths sFindText, ActiveDocument.content
Next
End Sub
Sub FindMonths(month As String, searchRange As Range)
Dim bFound As Boolean
bFound = searchRange.Find.Execute(month)
Do While bFound
searchRange.Collapse wdCollapseEnd
searchRange.Delete wdCharacter, 1
searchRange.Text = Chr(160)
searchRange.End = searchRange.Document.content.End
bFound = searchRange.Find.Execute(month)
Loop
End Sub
推荐阅读
- clang - 新行中的大括号 ( { )
- r - R包tmap:无法在线叠加点&无法在视图模式下显示点
- reactjs - 在这个 redux react 示例中,根 reducer 来自哪里,dispatch 如何知道要使用哪个 reducer?
- laravel - ErrorException:文件中的数组到字符串的转换
- javascript - 页面刷新时显示 SWIPER JS API 的中间幻灯片
- c++ - 带有构造函数的简单类引发警告:ISO C++ 禁止将字符串常量转换为 'char*'
- java - 是否有可能以某种方式将 .setMicrosecondPosition() 与线一起使用,还是只能与剪辑一起使用
- php - 如何在 PHP 中发送带有一些参数的链接?
- c# - Postman 和 RestSharp 的不同结果
- mysql - 有没有更好的方法来构造这个 MySQL 查询以使其运行得更快?