根据单词是否粗体更改单词样式的速度很慢

2024-01-02

我想更改活动文档中几个单词的样式。

  • 每个单词可能出现多次。
  • 有些词是粗体,有些是非粗体。

单词存储在数组中Arr().

如果找到的单词 X 是非粗体,则将样式替换为StyleA如果它是粗体,则将其更改为StyleB.

以下代码有两个问题。

1) 粗体和非粗体的单词格式改为StyleA.
2)执行时间慢。我测试了从1到5的循环,花了将近一分钟。

Sub ReplaceStyle()
    Dim Arr(1 to 200)

    Arr(1) = "Word1"
    Arr(2) = "Word2"
    .
    .
    .
    Arr(200) = "Word200"

    For i = 1 To Ubound(Arr)
        With Selection.Find
            .ClearFormatting
            .Replacement.ClearFormatting
            .Text = Arr(i)
            .Replacement.Text = ""

            If Selection.Font.Bold = False Then
                .Replacement.Style = ActiveDocument.Styles("StyleA")
            Else
                .Replacement.Style = ActiveDocument.Styles("StyleB")
            End If

            .Forward = True
            .Wrap = wdFindContinue
            .Format = True
            .MatchCase = False
            .MatchWholeWord = False
            .MatchWildcards = False
            .MatchSoundsLike = False
            .MatchAllWordForms = False
            .Execute Replace:=wdReplaceAll
        End With
    Next

End Sub

问题中的代码逻辑有问题。Find实际上需要有located代码前的搜索词可以测试它是否为粗体。

可能有两种基本方法

  1. 搜索术语,找到后执行测试并应用样式
  2. 每个术语搜索两次,一次为粗体,一次为非粗体

您需要进行测试,但根据经验,我相信第二种方法会更快,因为它可以使用ReplaceAll.

下面的代码根据问题中的代码演示了原理。请注意,它使用Range对象,而不是Selection因为这通常更有效。

Sub FindReplaceFormattingVariations()
    Dim rng As Word.Range
    Dim searchTerm As String
    Dim Arr(1 to 200)

    Arr(1) = "Word1"
    Arr(2) = "Word2"
    .
    .
    .
    Arr(200) = "Word200"

For i = 1 To Ubound(Arr) 
    searchTerm = Arr(i)
    Set rng = ActiveDocument.content
    With rng.Find
        .ClearFormatting
        .Replacement.ClearFormatting
        .Text = searchTerm
        .Font.Bold = True
        .Replacement.Style = ActiveDocument.Styles("StyleA")
        .Execute Replace:=wdReplaceAll
    End With

    With rng.Find
        .ClearFormatting
        .Replacement.ClearFormatting
        .Text = searchTerm
        .Font.Bold = False
        .Replacement.Style = ActiveDocument.Styles("StyleB")
        .Execute Replace:=wdReplaceAll
    End With
Next    
End Sub
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

根据单词是否粗体更改单词样式的速度很慢 的相关文章

  • 使用 Python 在 OpenOffice/Microsoft Word 中格式化输出

    我正在开发一个需要格式化 可编辑输出的项目 Python 由于最终用户不会精通技术 因此输出需要采用文字处理器可编辑的格式 格式很复杂 要点 段落 粗体等 有没有办法使用Python生成这样的报告 我觉得应该有一种方法可以使用 Micros
  • 使用查询选择器从 VBA 中抓取

    我使用了该网站的代码来提取数据site https bazashifer ru proflist profnastil Option Explicit Public Sub GetInfo Dim sResponse As String i
  • 报告文字颠倒?

    由于特定原因 我需要能够在报告的下半部分颠倒 倒置 显示一些值 这份报告的目的是打印并从中间折叠起来 所以我希望它遵循这种特定的格式 我找不到任何可以轻松做到这一点的东西 我考虑过但不知道如何实施的一些想法 导入 颠倒字体并将控件的字体设置
  • 复制列中的所有单元格[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我有一张表 有 200 行 行间有一
  • FileDialog 保留以前的过滤器

    我正在 Access 数据库中制作表单 我需要打开文件对话框窗口几次 我只是不明白为什么在我更改选项值几次并打开文件对话框窗口后它没有更改过滤器 Public Sub Command17 Click Dim fd As FileDialog
  • Range.End() 困惑

    我有一个关于 VBA 中 Range End 属性的一般性问题 我已经阅读了有关该房产的信息here http msdn microsoft com en us library bb221181 aspx 但我还是很困惑 例子 With w
  • 需要在Excel中合并3列

    我有 3 列 A B C 我需要合并这 3 列 并且我已经应用了 forumala A1 B1 C1输出为 E 列 我需要输出为 D 列 下面的公式将达到您想要的结果 TEXTJOIN TRUE A1 C1 Textjoin 的工作方式类似
  • 具有多个条件(全部等于相同值)的 IF 语句的替代方案

    还有比这更好的方法吗 假设所有变量都为零 If var1 0 Or var2 0 Or var3 0 Or var4 0 Or var5 0 Or var6 0 Then do something End If 你可以用Select Cas
  • 运行时错误“1004”:无法获取 WorksheetFunction 类的 Combin 属性

    我在 Excel 2013 的工作簿中有 VBA 函数 可以根据泊松分布计算 p 值 当 的时候events下面代码中的变量超过 1029 我得到运行时错误 1004 无法获取 WorksheetFunction 类的 Combin 属性
  • 将表行从 Word 文档复制到现有文档表特定单元格

    我正在寻找一个宏 它将内容从一个 Word 文档中的表格复制到另一个现有 Word 文档中的表格到特定单元格中 从第 5 行开始 复制后面的所有行并将其粘贴到现有文档中的第 5 行 这可能吗 在此输入图像描述 https i stack i
  • 如何在不滚动的情况下截取整个电子邮件正文?

    我正在使用 OL2010 想要制作整个电子邮件的屏幕截图 不仅仅是 屏幕 可以用VBA或者外部程序来完成吗 有一个类似的问题 https stackoverflow com questions 4176340关于如何使用 C 实现这一点 注
  • MS Access 执行 POST Web 请求

    在我的 MS Access 应用程序中 我需要定期向我的网络服务器发送一批信息 我不需要任何花哨的东西 比如 SOAP XML RPC 或任何东西 只需一个简单的 POST 页面请求就足够了 我用谷歌搜索了一下 但找不到任何真正有用的东西
  • Word通过vba宏删除tabe列出现错误

    我想将excel中的数据复制到word表中 然后从表中删除一些列 我可以将数据复制到表中 但是当我删除列时会出现错误 无法访问此集合中的各个列 因为该表具有混合的单元格宽度 我的代码 Public Tbl1 As Table Sub cal
  • 我可以用文本框设置变量名称吗? excel

    我可以使用 TextBox Vba Excel 设置变量的名称吗 我必须以在文本框中写入组名称并单击命令按钮的方式输入新的产品组 代码必须从文本框中获取字符串 并将该字符串设置为新创建的数组的名称 我只想在运行时创建一个新变量 或数组 据信
  • Outlook 无法识别一个或多个姓名

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

    我可以将外部代码链接到 Word 文档吗 我有很多带有宏的 Word 文档 VBA 代码 全部使用相同的代码 我希望代码从外部源运行 而不是从所有这些文档中运行 这样 如果我必须更新代码 我只有一个地方需要更新 您可以创建一个模板并将其放入
  • VBA中的字符串是可以迭代的数组吗?

    VBA中字符串是数组吗 例如 我可以像在 C C 中那样迭代它吗 做这样的事情 char myArray 10 for int i 0 i lt length i cout lt lt myArray i VBA 中的等价物是什么 它的行为
  • 所以,我有 6 个“主”文件,然后分为 40 个单独的文件

    我将简要描述我想要的内容 我有 6 个 主 文件 每个文件包含 40 个工作表 如下所示 AG 工作簿有 HR Gp 1 到 HR Gp 40 ER 工作簿有 FB Gp 1 到 Gp 40 等 所有工作表都已 平坦 我已经成功创建了一个适
  • 将 Excel 范围转换为 VBA 字符串

    我想将给定范围内的值转换为 VBA 字符串 其中原始单元格值由任何选定的列分隔符和行分隔符分隔 分隔符可以是一个字符或更长的字符串 行分隔符是行末尾的字符串 该字符串应该像我们从左上角 从左到右 到右下角读取文本一样完成 以下是范围 A1
  • 如何在 VBA 中声明接受 XlfOper (LPXLOPER) 类型参数的函数?

    我在之前的回答里发现了问题 https stackoverflow com q 19325258 159684一种无需注册即可调用 C xll 中定义的函数的方法 我之前使用 XLW 提供的注册基础结构 并且使用 XlfOper 类型在 V

随机推荐

  • GO:未知标志-trimpath

    这是我第一次接触GO hello go My first GOlang program package main import fmt func main fmt Printf Hello World n 我收到此错误 command li
  • 如何添加“活动”类以与 Angular 2 链接

    我有一页包含部分和固定菜单 当用户单击菜单项时 页面将滚动到相应的部分 对于滚动我使用https github com Nolanus ng2 page scroll https github com Nolanus ng2 page sc
  • 如何确定使用 Spring Security 访问 URL 需要哪些角色?

    我正在使用 Spring Security 来保护网络应用程序 URL 的安全性如下
  • Java中如何将Integer[]数组转换为int[]数组?

    有没有一种奇特的方法将 Integer 数组转换为 int 数组 我不想迭代每个元素 我正在寻找一种优雅而快速的方式来编写它 相反 我正在使用 scaleTests add Arrays stream data boxed toArray
  • 有效地选择随机数

    我有一个方法 它使用随机样本来近似计算 该方法被调用数百万次 因此选择随机数的过程是否高效非常重要 我不确定java有多快Random nextInt确实如此 但我的程序似乎并没有像我希望的那样受益 选择随机数时 我执行以下操作 以半伪代码
  • 锁定多个 std::mutex 的最佳方法是什么?

    注意 这个问题涉及C 11 C 17 或更高版本 中同一问题的答案可能已更改 详情 std lock guard 还是 std scoped lock https stackoverflow com questions 43019598 s
  • 如何根据 Django 管理中另一个选择标签的选项更改选择标签选项?

    我在 admin py 中有这个 class BrandAdmin admin ModelAdmin list display name category date form BrandAdminForm class Media js ow
  • 实体框架和表值参数

    我正在尝试调用存储过程实体框架它使用表值范围 但是当我尝试执行函数导入时 我不断收到一条警告消息 函数 InsertPerson 有一个参数 InsertPerson TVP 参数索引 0 具有当前的数据类型 表类型 目标 NET Fram
  • 两个数组之间的差异

    我有以下两个数组 我想要这两个数组之间的差异 也就是说 如何找到两个数组中都不存在的值 array1 Array 0 gt 64 1 gt 98 2 gt 112 3 gt 92 4 gt 92 5 gt 92 array2 Array 0
  • 可以在外部html中使用Extjs的脚本吗?

    我已使用以下方法将手动编写的脚本加载到 Extjs Ext Loader LoadScript http docs sencha com extjs 4 1 3 api Ext Loader method loadScript Ext Lo
  • Java PDF 查看器

    我正在使用 java 和 RCP 并且尝试在我的视图中使用 Acrobat 显示 pdf 文档 我不需要改变它们 我的这段代码有这个错误 知道如何解决这个问题吗 P s 同样的时间效果很好 PDFFile pdfFile pdfFile P
  • 如何释放不再使用的 UIImage 内存

    我正在尝试将一些较小的图像合并为一个较大的图像 该应用程序崩溃是因为内存不足 但我不知道如何在使用内存后释放内存 因此它会不断累积 直到应用程序崩溃 addImageToImage 和 resizeImage 例程似乎导致了崩溃 因为在不再
  • 如何为采用单个数组参数的构造函数调用 New-Object?

    在 PowerShell 中 我想使用New Object调用单参数 Net 构造函数new X509Certificate2 byte byteArray 问题是当我使用 powershell 中的字节数组执行此操作时 我得到 新对象 找
  • 确定字符串是否经过两次 Base64 编码

    有什么方法可以确定字符串是否经过两次 Base64 编码 例如 是否有我可以使用的正则表达式模式preg match去做这个 实际答案 不要使用正则表达式 使用解码你的字符串base64 decode http php net manual
  • 模拟已弃用的seaborn distplots

    Seaborn distplot https seaborn pydata org generated seaborn distplot html现已弃用 并将在未来版本中删除 建议使用histplot https seaborn pyda
  • 在 flash builder as3 项目中使用 c++ lib

    是否可以在as3项目中使用c lib 闪存生成器 4 7 我有一个用 C 编写的项目 我想用 flash 构建 gui 我正在寻找一种使用 flash 并使用我的 c 库的方法 我猜想一个Flash http en wikipedia or
  • NetBeans - 在哪里可以找到 IDE 日志?

    我向以下人员报告了一个错误http issues apache org http issues apache org我必须给他们一个 IDE 日志 但我不知道在哪里可以找到它 我搜索了C Users MyUser但没有 netbeans 的
  • 应用程序配置不允许给定 URL Facebook 应用程序错误

    应用程序配置不允许给定 URL 应用程序设置不允许一个或多个给定 URL 它必须与网站 URL 或画布 URL 匹配 或者该域必须是应用程序域之一的子域 我已经研究了关于 SO 的最流行的问题 问题1 https stackoverflow
  • Python - 仅运行一行代码,而不运行脚本中其余的多行代码

    在 Python 中 在 IDLE 内 在文件编辑器窗口中 如何仅运行脚本中选定的单行代码 而不运行程序的其余行 您必须从命令行运行代码行 使用 c 命令 参数 假设您的文件名为 foo py python c import foo pri
  • 根据单词是否粗体更改单词样式的速度很慢

    我想更改活动文档中几个单词的样式 每个单词可能出现多次 有些词是粗体 有些是非粗体 单词存储在数组中Arr 如果找到的单词 X 是非粗体 则将样式替换为StyleA如果它是粗体 则将其更改为StyleB 以下代码有两个问题 1 粗体和非粗体