重复 Microsoft Word VBA 直到找不到搜索结果

2024-04-15

我创建了一个 MS Word 宏,用于搜索某些文本(由标记代码表示)、剪切文本并将其插入到新的脚注中,然后从脚注中删除标记代码。现在我希望宏重复,直到它在文本中找不到更多标记代码。
这是下面的宏

Sub SearchFN()

'find a footnote
Selection.Find.ClearFormatting
With Selection.Find
    .Text = "&&FB:*&&FE"
    .Replacement.Text = ""
    .Forward = True
    .Wrap = wdFindContinue
    .Format = False
    .MatchCase = False
    .MatchWholeWord = False
    .MatchKashida = False
    .MatchDiacritics = False
    .MatchAlefHamza = False
    .MatchControl = False
    .MatchByte = False
    .MatchAllWordForms = False
    .MatchSoundsLike = False
    .MatchFuzzy = False
    .MatchWildcards = True
End With
Selection.Find.Execute

'cut the footnote from the text
Selection.Cut

'create a proper Word footnote
With Selection
    With .FootnoteOptions
        .Location = wdBottomOfPage
        .NumberingRule = wdRestartContinuous
        .StartingNumber = 1
        .NumberStyle = wdNoteNumberStyleArabic
    End With
    .Footnotes.Add Range:=Selection.Range, Reference:=""
End With

'now paste the text into the footnote
Selection.Paste

'go to the beginning of the newly created footnote
'and find/delete the code for the start of the note (&&FB:)
    Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
    .Text = "&&FB:"
    .Replacement.Text = ""
    .Forward = False
    .Wrap = wdFindContinue
    .Format = False
    .MatchCase = False
    .MatchWholeWord = False
    .MatchKashida = False
    .MatchDiacritics = False
    .MatchAlefHamza = False
    .MatchControl = False
    .MatchByte = False
    .MatchAllWordForms = False
    .MatchSoundsLike = False
    .MatchFuzzy = False
    .MatchWildcards = True
End With
Selection.Find.Execute
With Selection
    If .Find.Forward = True Then
        .Collapse Direction:=wdCollapseStart
    Else
        .Collapse Direction:=wdCollapseEnd
    End If
    .Find.Execute Replace:=wdReplaceOne
    If .Find.Forward = True Then
        .Collapse Direction:=wdCollapseEnd
    Else
        .Collapse Direction:=wdCollapseStart
    End If
    .Find.Execute
End With

'do same for ending code (&&FE)
With Selection.Find
    .Text = "&&FE"
    .Replacement.Text = ""
    .Forward = True
    .Wrap = wdFindContinue
    .Format = False
    .MatchCase = False
    .MatchWholeWord = False
    .MatchKashida = False
    .MatchDiacritics = False
    .MatchAlefHamza = False
    .MatchControl = False
    .MatchByte = False
    .MatchAllWordForms = False
    .MatchSoundsLike = False
    .MatchFuzzy = False
    .MatchWildcards = True
End With
Selection.Find.Execute
With Selection
    If .Find.Forward = True Then
        .Collapse Direction:=wdCollapseStart
    Else
        .Collapse Direction:=wdCollapseEnd
    End If
    .Find.Execute Replace:=wdReplaceOne
    If .Find.Forward = True Then
        .Collapse Direction:=wdCollapseEnd
    Else
        .Collapse Direction:=wdCollapseStart
    End If
    .Find.Execute
End With

Selection.HomeKey Unit:=wdStory
'now repeat--but how??    

End Sub

这个问题问得好,您可以使用循环遍历整个文档Selection.Find.Found结果。

您要做的就是开始搜索,如果找到结果,则仅在Selection.Find.Found结果是真的。一旦你完成了这些,你就完成了。下面的代码应该可以很好地帮助您。

Sub SearchFN()
    Dim iCount As Integer

    'Always start at the top of the document
    Selection.HomeKey Unit:=wdStory

    'find a footnote to kick it off
    With Selection.Find
        .ClearFormatting
        .Text = "&&FB:*&&FE"
        .Replacement.Text = ""
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchKashida = False
        .MatchDiacritics = False
        .MatchAlefHamza = False
        .MatchControl = False
        .MatchByte = False
        .MatchAllWordForms = False
        .MatchSoundsLike = False
        .MatchFuzzy = False
        .MatchWildcards = True
        .Execute
    End With

    'If we find one then we can set off a loop to keep checking
    'I always put a counter in to avoid endless loops for one reason or another
    Do While Selection.Find.Found = True And iCount < 1000
        iCount = iCount + 1

        'Jump back to the start of the document.  Since you remove the
        'footnote place holder this won't pick up old results
        Selection.HomeKey Unit:=wdStory
        Selection.Find.Execute

        'On the last loop you'll not find a result so check here
        If Selection.Find.Found Then

            ''==================================
            '' Do your footnote magic here
            ''==================================

            'Reset the find parameters
            With Selection.Find
                .ClearFormatting
                .Text = "&&FB:*&&FE"
                .Replacement.Text = ""
                .Forward = True
                .Wrap = wdFindContinue
                .Format = False
                .MatchCase = False
                .MatchWholeWord = False
                .MatchKashida = False
                .MatchDiacritics = False
                .MatchAlefHamza = False
                .MatchControl = False
                .MatchByte = False
                .MatchAllWordForms = False
                .MatchSoundsLike = False
                .MatchFuzzy = False
                .MatchWildcards = True
            End With
        End If
    Loop
End Sub
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

重复 Microsoft Word VBA 直到找不到搜索结果 的相关文章

  • 如何刷新幻灯片放映中的活动幻灯片?

    基于我的最后一个问题 https stackoverflow com questions 14503054 change the image of an image shape我得到了正确的代码来更改形状的图像 不幸的是 这不会更新活动演示
  • VBA:访问 JSON

    我正在处理 VBA 投影 但不确定如何访问此 JSON 中的 id 应该将 players 设置为什么才能在循环中获取 id 我已经用更多代码更新了问题 JSON event games players id 182759 Code Pri
  • 在 VBA 循环中导出查询以根据字符串值选择数据

    我有一个名为 TEST 的表 下面的代码根据 Territory 列中的唯一值循环导出查询 该代码应该根据 Territory 列中的唯一值将数据导出到 Excel 文件 因此每个 Territory 值都有它自己的文件 我在设置 sql
  • 如果字符串包含列表中的单词,则返回与列表值相邻的值

    目前我有一组单元格 每个单元格在无用的信息中都有一个唯一的标识符 我还有这些唯一标识符的列表 以及每个标识符对应的值 我想做的是找到一个单元格包含哪个标识符 如果有的话 然后输出相应的值 下面是一个例子 https i stack imgu
  • 在 PowerPoint 中查找文本并替换为 Excel 单元格中的文本

    我正在尝试查找 PowerPoint 幻灯片中的单词列表并将其替换为 Excel 文件中单元格中的值 我在 PowerPoint 中运行 VBA 但出现此错误 运行时错误 2147024809 80070057 指定的值超出范围 代码似乎停
  • 使用 PDFMAKER 将多封电子邮件保存为 pdf

    我是 VBA 的新手 但我用 SAS 编写了一些程序 用汇编程序 大型机和 PC Word Perfect 宏 编写了一些程序 用 Java HTML 和其他东西编写了一些程序 我所做的是 当我遇到问题并且我认为我可以对其进行编程时 我会在
  • PHP MS Word 文件页数

    实际上我正在尝试计算 ms word 文件的页数 我正在使用这个 php 脚本 但是 没有向我显示确切的结果 并且脚本不是那么快 谁能帮助我获得更好的脚本 word new COM word application if word echo
  • 如何处理 Workbook.SaveAs 覆盖确认上的“否”或“取消”?

    我希望在 VBA 脚本开始修改内容之前提示用户保存工作簿 当 另存为 对话框出现时 如果用户单击 取消 我会引发自定义错误并停止脚本 如果他们单击 保存 并且文件名已存在 我希望询问他们是否覆盖 这是我的代码 Function SaveCu
  • 在 VBA 中使用 getElementsByClassName

    我正在使用此代码从页面获取产品名称 页面代码是 div class product shop col sm 7 div class product name h1 Claro Glass 1 5 L Rectangular Air Tigh
  • Excel VBA - 如何逐行读取csv文件而不是整个文件

    这是我需要读取的 csv 文件内容 header header header header header header value value value value value value value value value 我在网上找到
  • 在 VBA 中按键对字典进行排序

    我使用 VBA 创建了一个字典CreateObject Scripting Dictionary 将源单词映射到要在某些文本中替换的目标单词 这实际上是为了混淆 不幸的是 当我按照下面的代码进行实际替换时 它将按照源单词添加到字典中的顺序替
  • 使用 VBA 通过简单命令从非连续范围的并集获取值到数组中(无循环)

    我有以下任务 表面上很简单 使用 VBA 将电子表格上多个列的值复制到二维数组中 为了让生活更有趣 这些柱子并不相邻 但它们的长度都相同 显然 可以通过依次循环每个元素来做到这一点 但这看起来非常不优雅 我希望有一个更紧凑的解决方案 但我很
  • MS Access 执行 POST Web 请求

    在我的 MS Access 应用程序中 我需要定期向我的网络服务器发送一批信息 我不需要任何花哨的东西 比如 SOAP XML RPC 或任何东西 只需一个简单的 POST 页面请求就足够了 我用谷歌搜索了一下 但找不到任何真正有用的东西
  • Excel VBA 过滤和复制粘贴数据

    给定一个数据集 假设有 10 列 在 A 列中我有日期 在 B 列中我有 我想仅过滤 A 列 2014 年的数据 B 列 ActiveSheet Range A 1 AR 1617 AutoFilter Field 5 Operator x
  • 在 VBA 中循环合并单元格

    是否可以循环遍历合并的单元格vba questions tagged vba 我的范围内有 6 个合并单元格B4 B40 我只需要这 6 个单元格中的值 6 次迭代 上面的答案看起来已经让你排序了 如果您不知道合并的单元格在哪里 那么您可以
  • 如何在字符串vba中包含引号

    我想存储以下文本 Test1 Monday Test Abcdef 全部在字符串中包含引号 我知道要在字符串中包含引号 我必须包含 之前 但在这里这不是一个很好的解决方案 因为我在文本中有太多这样的解决方案 知道如何一次完成这一切吗 您有两
  • 字典、集合和数组的比较

    我正在尝试找出字典与集合和数组相比的相对优点和功能 我发现了一篇很棒的文章here http www experts exchange com articles 3391 Using the Dictionary Class in VBA
  • VBA根据单元格的值是否为零显示/隐藏行

    我有一个 Excel 工作表 我想根据另一个单元格中的值隐藏或取消隐藏某些行 简而言之 整个事情应该取决于单元格中的值C2 D2 E2 If C2 is blank我想rows 31 to 40被隐藏 如果是的话不为空 他们需要是visib
  • Outlook 无法识别一个或多个姓名

    我有以下 vba 代码 它读取邮箱并向任何发送无效代码作为邮箱回复的用户发送回复 但有时会收到运行时错误 Outlook 无法识别一个或多个名称 我的问题是 创建新的 MAPI 配置文件是否可以解决该问题 或者我是否需要添加一个代码来解析地
  • 根据单元格值向用户窗体添加复选框

    我对 VBA 很陌生 只有 3 天 但我发现它非常有用且易于使用 但现在我面临一个问题 我需要制作一个具有不同复选框的用户窗体 但我需要根据工作表某一列中使用的信息自动添加它们 我相信我可以使用 For Each Next 但我真的不知道如

随机推荐

  • 模块“pandas”没有属性“rolling_mean”

    我正在尝试构建 ARIMA 用于异常检测 我需要找到时间序列图的移动平均值 我尝试为此使用 pandas 0 23 import pandas as pd import numpy as np from statsmodels tsa st
  • 地理编码器错误 java.io.IOException:无法解析来自服务器的响应

    Code Geocoder geocoder new Geocoder map this Locale getDefault List
  • 为什么sonar:sonar需要先安装mvn?

    官方文档http docs sonarqube org display SONAR Analyzing with Maven http docs sonarqube org display SONAR Analyzing with Mave
  • iOS:通过自定义 UITableViewCell 上的 UITextView 选择

    我有一个带有图像和 UITextView 属性的自定义 UITableViewCell 文本视图跨越到单元格的边缘 我的问题是点击文本视图未在 didSelectRowAtIndexPath 中注册 我怎样才能让我可以 点击 我的文本视图
  • Login-AzureRmAccount 命令无法从托管 C# 应用程序运行

    我正在使用 powershell 脚本登录到 azure 为此我编写了简单的命令 Login AzureRmAccount 并在单击按钮时将该脚本调用到 C 代码中 它在本地工作正常 但是当我在服务器上托管此页面时 身份验证弹出窗口未打开
  • 如何在 PHP 中打印今天的尼泊尔日期? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我想以不同的日期格式回显打印尼泊尔日历日期 请看一下下面的代码 有一个 jquery 日期选择器 http sajanmaharjan c
  • 是否可以预加载和缓存视频文件而不将它们添加到 DOM?

    我正在开发一款游戏 根据得到的结果触发 30 个小视频文件中的一个 由于视频需要在用户交互后立即播放 因此理想情况下我希望预加载视频并准备好播放 我添加了 PreloadJS 对我需要的所有资源进行了排队 查看检查器中的 网络 选项卡 我可
  • ed25519.公开结果不同

    使用包https github com golang crypto tree master ed25519 https github com golang crypto tree master ed25519我正在尝试获取给定私钥的公钥 这
  • 将变量传递到 xp_cmdshell

    我在 SQL Server 中有一个存储过程 用于检查今天的备份文件 文件名中包含日期的文件 检查完毕后 将继续进行robocopy这些文件到另一个文件夹 挑战 在此文件夹中 可能存在昨天或其他日期的文件 但只需要今天的bak文件来传输 d
  • 错误域=NSOSStatusErrorDomain 代码=-12780 \"(null)\"

    当我尝试使用 AVAssetExport 导出资产时 仅在通过 Whatsapp 接收的视频上可能会出现以下错误 我找不到可行的解决方案 我还尝试实现代码来修复视频持续时间 但我没有修复它 错误是 错误域 NSOSStatusErrorDo
  • Webpack 4.编译scss分离css文件

    我试图将 scss 编译成一个单独的 css 文件 但没有成功 现在 css 与所有 js 代码一起进入到bundle js 中 我怎样才能将我的CSS分离到它自己的文件中 这是我的配置的样子 var path require path m
  • 使用 jQuery 检查链接是否仍然有效

    我创建了一个快速功能 使用 AJAX 检查页面上的每个链接 看看它们是否仍然有效 这似乎有效 但它为每个类添加了成功和错误类 如何让错误回调函数仅在 AJAX 响应为 404 时抛出 li each function this childr
  • 如何垂直对齐 IE 输入框上的文本

    I have this http jsfiddle net dVDT8 code
  • 获取虚拟目录中文件的本地路径

    我有一个 ASP NET Core 3 0 MVC 应用程序 其中包含图像 例如 http foo bar images image jpg 现在 文件夹images is a 虚拟目录映射到网络驱动器 例如 192 168 1 1 ima
  • 如何增加 Qt 中线程的堆栈大小 - QThread::setStackSize() 似乎不起作用?

    从问题来看 运行批量插入或替换 500 行时 SQLite 堆栈溢出 为什么 https stackoverflow com questions 22576958 sqlite stack overflow when running a b
  • Gnuplot multiplot 中的双柱图

    我尝试创建多图 2x2 和单图的组合 我不知道 我做错了什么 但我不知道该怎么做 我的尝试 plot sin x title this should be a single plot set multiplot layout 2 2 tit
  • 是否可以过滤开放扩展?

    我正在考虑选择开放扩展还是架构扩展 架构扩展 我知道我可以过滤 但由于我没有注册任何有效的顶级域名 所以我最终得到了一个丑陋的架构名称 这不是一个阻碍 只是一个小小的刺激 我正在向组添加自定义元数据 并希望将查询限制为具有特定元数据值的所有
  • 扩展现有的 jQuery 函数

    我正在尝试编写一个插件来扩展 jQuery 中的现有功能 例如 function fn css function stuff I will be extending that doesn t affect change the way cs
  • Rails:ActiveRecord:RecordNotUnique 与first_or_create

    我的模型表中有这个索引 UNIQUE KEY index panel user offer visits on offer id and panel user id offer id panel user id 这段代码 def get o
  • 重复 Microsoft Word VBA 直到找不到搜索结果

    我创建了一个 MS Word 宏 用于搜索某些文本 由标记代码表示 剪切文本并将其插入到新的脚注中 然后从脚注中删除标记代码 现在我希望宏重复 直到它在文本中找不到更多标记代码 这是下面的宏 Sub SearchFN find a foot