我创建了一个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

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

  1. 使用VBA从Outlook AddressBook中的项目获取别名

    我下面的代码在Debug.Print中显示以下错误,原因是什么?

  2. 设置重复动作。如果是循环或Do或?陈述

    '我需要在列之间重复复制和粘贴过程,直到计数器'=键页、“book”单元格或从第1行读取,如果第1行#=键“book”#'下一列(页)应为上一个副本/粘贴列的3列“PicPg”B2副本至“PrntPg”B2E2至E2等**这是我第一次在任何论坛上寻求帮助。请原谅我的无知。我会尽力回答任何问题。我可以共享工作簿,只是不知道如何共享。我一直在努力让它继续重复。。。。我只能走到这一步。

  3. 提取单元格超链接的完整路径

    如何提取单元格中超链接的完整路径?我收到一个工作簿,其中包含生成的超链接单元格列表,我正在尝试提取完整路径当我选择一个单元格并按CTRL+K时,它只显示路径为/当我使用下面的vba代码时,文件夹/文件名也显示相同的值我想要的是完整路径,如“C:\Users\username\folder\filename”

  4. 为什么我收到编译错误:代码子行中的类型不匹配?

    我正在为学校制作一个涉及创建彩票的程序,但出于某种原因,我的代码“SubRunLottery()”的第一行返回了一个类型不匹配错误?错误消息ss错误突出显示ss我真的不知道该在这里尝试什么,因为我不知道Excel为什么会抛出错误?我以前处理过类型不匹配,但从未在我的程序的Sub部分处理过,所以我不确定解决方案是什么。

  5. 为什么在Excel VBA字符串中使用[@Name]会导致错误1004?

    当我尝试使用ExcelVBA执行此语句时,出现错误1004:如果我去掉@Name周围的括号,它会正常工作。字符串中的其他括号不会造成麻烦。如果我手动将语句放在一个单元格中,它就会正常工作。

  6. VBA问题:从定义的文件路径将CSV导入到单独的Excel选项卡中(每天覆盖)?

    我是一个VBA的新手用户,我正在尝试使用不同的选项卡将CSV文件列表导入excel电子表格。我找到并正在使用的代码是公共的:虽然它有效,但问题是我必须直接选择文件夹。我更希望定义文件名并自动覆盖现有数据。有什么想法/例子可以告诉我?

  7. 在Microsoft Excel VBA中使用INDIRECT函数引用单元格

    我试图复制一个具有动态范围的表,我想通过使用INDIRECT函数引用表的底部单元格。这是我的当前代码:上述公式不起作用的原因是,表中有时有空白单元格,因此使用“结束”将只运行到表中的第一个空白单元格。我有一个公式设置,在透视表工作表的单元格中给出表格的底行,这个公式在单元格I8中。它只返回一个数字,即“61”。我主要想做的是说:Range,Range。Copy不使用Range,而是Range。Copy,但是这个语法显然不正确。

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

    我创建了一个MSWord宏来搜索某些文本(用标记代码表示),剪切文本并将其插入新的脚注,然后从脚注中删除标记代码.现在我希望宏重复,直到它在文本中找不到任何更多的标记代码.这是下面的宏很好的问题,您可以使用Selection.Find.Found结果遍历整个文档.你做的是开始搜索,如果你发现结果只在Selection.Find.Found结果为真时进入循环.一旦你完成了这些,你就完成了.以下代码应

  9. 如何从Microsoft Access VBA中的SQL查询中获取数据?

    嘿,我只是学会了如何将我的sql语句放入VBA,但我不知道如何获取返回的数据?我有几种形式基于我运行非常常规参数的查询,只是改变时间框架.然后我有自动将图表对象传输到powerpoint演示文稿的过程.所以我预先建立了所有这些查询(如63),并且图表形式匹配(呃,是啊……

  10. ms访问 – 在Microsoft Access“应用程序”中搜索字段引用

    我已经继承了MSAccess“应用程序”,并希望跟踪对其中一个字段的所有引用.有没有办法搜索该字段(所有google命中是用于查询表).注意:我不是在寻找任何sql帮助,我想像VisualStudio右键单击–>找到所有引用类型的东西.>转到工具>分析>文档管理>所有类别中的“全选”项>在选项下,确保选中“代码”(应为默认值)>运行文档记录器报告>导出为.rtf或其他文本格式>搜索您的字段名称这是

随机推荐

  1. static – 在页面之间共享数据的最佳实践

    我想知道在UWP的页面之间发送像’selectedItem’等变量的最佳做法是什么?创建一个每个页面都知道的静态全局变量类是一个好主意吗?

  2. .net – 为Windows窗体控件提供百分比宽度/高度

    WindowsForm开发的新手,但在Web开发方面经验丰富.有没有办法为Windows窗体控件指定百分比宽度/高度,以便在用户调整窗口大小时扩展/缩小?当窗口调整大小时,可以编写代码来改变控件的宽度/高度,但我希望有更好的方法,比如在HTML/CSS中.在那儿?

  3. 使用Windows Azure查询表存储数据

    我需要使用特定帐户吗?>将应用程序部署到Azure服务后,如何查询数据?GoogleAppEngine有一个数据查看器/查询工具,Azure有类似的东西吗?>您可以看到的sqlExpressintance仅在开发结构中,并且一旦您表示没有等效,所以请小心使用它.>您可以尝试使用Linqpad查询表格.看看JamieThomson的thispost.

  4. windows – SetupDiGetClassDevs是否与文档中的设备实例ID一起使用?

    有没有更好的方法可以使用DBT_DEVICEARRIVAL事件中的数据获取设备的更多信息?您似乎必须指定DIGCF_ALLCLASSES标志以查找与给定设备实例ID匹配的所有类,或者指定ClassGuid并使用DIGCF_DEFAULT标志.这对我有用:带输出:

  5. Windows Live ID是OpenID提供商吗?

    不,WindowsLiveID不是OpenID提供商.他们使用专有协议.自从他们的“测试版”期结束以来,他们从未宣布计划继续它.

  6. 如果我在代码中进行了更改,是否需要重新安装Windows服务?

    我写了一个Windows服务并安装它.现在我对代码进行了一些更改并重新构建了解决方案.我还应该重新安装服务吗?不,只需停止它,替换文件,然后重新启动它.

  7. 带有双引号的字符串回显使用Windows批处理输出文件

    我正在尝试使用Windows批处理文件重写配置文件.我循环遍历文件的行并查找我想要用指定的新行替换的行.我有一个’函数’将行写入文件问题是%Text%是一个嵌入双引号的字符串.然后失败了.可能还有其他角色也会导致失败.如何才能使用配置文件中的所有文本?尝试将所有“在文本中替换为^”.^是转义字符,因此“将被视为常规字符你可以尝试以下方法:其他可能导致错误的字符是:

  8. .net – 将控制台应用程序转换为服务?

    我正在寻找不同的优势/劣势,将我们长期使用的控制台应用程序转换为Windows服务.我们为ActiveMQ使用了一个叫做java服务包装器的东西,我相信人们告诉我你可以用它包装任何东西.这并不是说你应该用它包装任何东西;我们遇到了这个问题.控制台应用程序是一个.NET控制台应用程序,默认情况下会将大量信息记录到控制台,尽管这是可配置的.任何推荐?我们应该在VisualStudio中将其重建为服务吗?我使用“-install”/“-uninstall”开关执行此操作.例如,seehere.

  9. windows – 捕获外部程序的STDOUT和STDERR *同时*它正在执行(Ruby)

    哦,我在Windows上:-(实际上,它比我想象的要简单,这看起来很完美:…是的,它适用于Windows!

  10. windows – 当我试图批量打印变量时,为什么我得到“Echo is on”

    我想要执行一个简单的批处理文件脚本:当我在XP中运行时,它给了我预期的输出,但是当我在Vista或Windows7中运行它时,我在尝试打印值时得到“EchoisOn”.以下是程序的输出:摆脱集合表达式中的空格.等号(=)的两侧可以并且应该没有空格BTW:我通常在@echo关闭的情况下启动所有批处理文件,并以@echo结束它们,所以我可以避免将代码与批处理文件的输出混合.它只是使您的批处理文件输出更好,更清洁.

返回
顶部