如何在 VBA 中替换范围/选择范围内的 Microsoft Word 字符样式?

2024-02-23

我正在开发一个带有宏的 Word 2007 模板,该宏会将字符样式应用于所选文本。查找/替换功能似乎是一个很好的起点,但我认为我发现了一个错误/限制,导致宏无法按预期工作。

这是我的 vba 代码:

Sub restyleSelection()
    Dim r As Range
    Set r = Selection.Range
    With r.Find
        .Style = ActiveDocument.Styles("Default Paragraph Font")
        .Text = ""
        .Replacement.Text = ""
        .Replacement.Style = ActiveDocument.Styles("Emphasis")
        .Forward = True
        .Wrap = wdFindStop
        .Format = True
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
        .Execute Replace:=wdReplaceAll
    End With
End Sub

如果我创建一个包含几个段落的测试文档,并在其中一个段落中选择几个单词,然后运行宏,则“强调”样式不仅应用于所选内容,而且应用于所选内容的结尾处该文件的。

此行为与使用实际 GUI 查找/替换工具时的行为相同。

我的问题是:我怎样才能克服这个错误/限制并应用字符样式ONLY在选择/范围内?

更多信息:
我真正需要宏做的是将某些格式应用于整个选择,同时保持选择中现有的字符样式。例如,如果所选文本包含粗体字符样式、斜体字符样式,其余部分为默认段落字体,则宏应将粗体替换为“修订粗体”,将“斜体”替换为“修订斜体”,然后将“默认段落字体”替换为“修订版”。这样,当我使用配套宏“撤消”该宏的操作时,可以替换原始字符样式(粗体、斜体、默认段落字体)。

SOLVED:
这是我最终得出的解决方案:

Sub applyNewRevisedText
    Dim r As Range          ' Create a new Range object
    Set r = Selection.Range ' Assign the current selection to the Range
    Dim rng As Range
    For Each rng In r.Words
        Set rngStyle = rng.Style
        Select Case rngStyle
        Case "Bold"
            rng.Style = ActiveDocument.Styles("New/Revised Text Bold")
        Case "Italic"
            rng.Style = ActiveDocument.Styles("New/Revised Text Emphasis")
        Case Else
            rng.Style = ActiveDocument.Styles("New/Revised Text")
        End Select
    Next rng
End Sub

回答你的直接问题

我的问题是:我怎样才能克服这个错误/限制并应用 字符样式仅在选择/范围内?

这不符合需求吗?:

Sub restyleSelection()
    Selection.Style = ActiveDocument.Styles("Emphasis")
End Sub

EDIT:

好的,根据您的评论,怎么样:

Dim rng As Range
  For Each rng In Selection.Words
    If rng.Bold 'do something
  Next rng

.Words 会将范围中的每个单词分解为范围的集合。然后,您可以根据每个单词当前的样式对其进行样式设置。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 VBA 中替换范围/选择范围内的 Microsoft Word 字符样式? 的相关文章

  • 根据当前工作簿中的匹配值编辑主工作簿中的单元格

    这里的目标是比较两个工作簿之间 A 列中的值 当前工作簿是 xlsm 目标工作簿是 xlsx 如果找到任何匹配项 匹配值同一行的 E 列中的值在目标工作簿中发生更改 在这种情况下 必须将工作簿分开 我决定通过选择当前工作簿 A2 中的第一个
  • 从网站上的表格中抓取数据,而无需搜索标签

    这是这个问题的延续使用 InStr 搜索引号 空格 冒号等 https stackoverflow com questions 52673819 using instr to search for quotes spaces colons
  • 如何模拟“焦点”和“打字”事件

    尝试模拟 onfocus 和打字事件 但它不起作用 Sub Login MyLogin MyPass Dim IEapp As InternetExplorer Dim IeDoc As Object Dim ieTable As Obje
  • 无法在我的抓取工具中设置超时选项以防止无限循环

    我已经使用 IE 在 vba 中编写了一个脚本 在其搜索框中的网页中启动搜索 通过点击搜索按钮根据搜索填充结果 网页加载它是searchbox几秒钟后它就会打开 但是 我的下面的脚本可以处理这个障碍并以正确的方式执行搜索 现在 我有一个稍微
  • 如何在VBA编辑器中跳转到行号?

    我在 Office 2010 中使用 VBA 在顶部 有一个带有行号和列号的框 例如 Ln 1480 Col 17 有没有办法在代码编辑中 而不是在执行中 直接跳转到另一个行号 就像我使用的那样Ctrl G在记事本中 这个MSDN答案 ht
  • 使用 VB.NET 检查 Word 文档中的字体样式

    我想使用vb net检查一个word文件 并检查文档中的样式是否正确 我必须在word文档中检查这些表达式 a Verdana 16 pt Bold Red b Verdana 12 pt Bold Italic Blue c Verdan
  • VBA 有没有办法了解未使用的变量?

    标准 VBA 编辑器中是否有工具 方法或设置来警告已被修改的变量Dim med 但没有被使用 MZ Tools http www mztools com index aspx将搜索您的代码并告诉您哪些内容未被使用 VBA的版本可以找到her
  • VBA 完成 Internet 表单

    我正在寻找将 Excel 中的值放入网页的代码 Sub FillInternetForm Dim IE As Object Set IE CreateObject InternetExplorer Application IE naviga
  • VBA ByRef 参数类型不匹配

    最初在我的主代码部分中 我有一个丑陋的 if 语句 尽管它会运行丑陋 我决定将其设为我要调用的函数 这导致我收到错误 编译错误 ByRef 参数类型不匹配 我的假设是该函数需要正确引用 尽管我一直在阅读文档并且不明白为什么 gt 声明 Sh
  • 在Excel中,我可以使用超链接来运行vba宏吗?

    我有一个包含多行数据的电子表格 我希望能够单击一个单元格 该单元格将使用该行中的数据运行宏 由于行数总是在变化 我认为每行的超链接可能是最好的方法 ROW MeterID Lat Long ReadX ReadY ReadZ CoeffA
  • 如何使用 VBA 添加 MS Outlook 提醒事件处理程序

    我想扩展 MS Outlook 以便当弹出日历提醒时 我可以运行一个可以运行外部程序 如批处理脚本 的 VBA 挂钩 就我而言 我想将提醒 转发 到 Linux 桌面 因为我在这两种环境中工作 并且 Windows 桌面并不总是可见 我看到
  • 使用PHP从doc、xls文件中读取数据

    我想知道是否可以从 doc 和 xls 文件中读取数据并将 将内容读取到图像文件中 创建文档的页面样本 例如 我有一些文件希望我的客户购买 所以我需要自动创建小图像 例如我的文档样本 我们将不胜感激您的帮助 对于读取 xls 文件 我真的推
  • 使用 XMLHTTP 进行抓取会在特定类名处引发错误

    我正在尝试使用此代码抓取网站以提取姓名和联系人 Sub Test Dim htmlDoc As Object Dim htmlDoc2 As Object Dim elem As Variant Dim tag As Variant Dim
  • Excel 2007 从 C# get_Value 始终返回 -2146826265

    我有一个引用 Microsoft Excel 12 0 对象库的小型 C 应用程序 除此之外 它还从 Excel 单元格读取值 它从一些较旧的 Excel xls 文件和一些 2007 文件 xlsx 中读取此值 所有 xls 文件的值都会
  • 如何在缩进层次结构中找到父级?

    我目前有一张 Excel 工作表 其中包含缩进的项目层次结构 如下所示 每个项目都缩进 每个缩进四个空格 以显示它如何适应整体层次结构 我已经能够创建一个 级别 列 将缩进级别转换为数字 Item Level Parent P1 1 N A
  • 使用 Excel VBA 循环工作簿文件夹并将所有工作表导出为制表符分隔文本

    我拼凑了一个 Excel VBA 脚本 该脚本将打开的工作簿中的所有工作表写入单独的制表符分隔文件 这仍然是 宏 吗 我正在 Excel 真空中学习这一点 它一次只处理一本工作簿 效果很好 这里是 Sub exportSheetsToTex
  • 将 OoXml 插入单词抛出错误:未知

    我一直在尝试通过office js将OOXML插入到word文档的正文内容中insertOoXML 方法 我什至尝试过最简单的实现 认为我在尝试替换 XML 本身中的 fieldCodes 时做了一些不正确的事情 所有结果都是这样Error
  • 如何在VBA中指定当前目录作为路径?

    我有一个启用宏的工作簿 我需要指定启用宏的文件所在的当前文件夹作为路径 我尝试设置 path ActiveWorkbook Path and path CurDir 但这些都不适合我 对此有什么想法吗 如果您想要的路径是运行宏的工作簿的路径
  • VB 脚本 Documents.Open 抛出 424 错误

    所以我有一个vbs脚本 Function test2open sSourceFile sPDFFile Dim wApp As Word Application Dim wDoc As Word Document logStream wri
  • Excel VBA:声明通用对象与指定对象类型之间的区别

    我发现使用声明为的变量出现了意外的 至少对我来说 行为Object在 Excel vba 中 我试图从 html 页面中提取一些数据 所以我使用了这样的例程 sub Test Dim htmlPage As htmlDocument Thi

随机推荐

  • ZF2如何从控制器外部获取实体管理器

    我们可以使用控制器内的实体管理器 this gt getServiceLocator gt get doctrine entitymanager orm default 但是我们如何访问 Zendframework 2 项目其余部分中的实体
  • IIS 7.0 中使用 svcutil.exe 的 WCF 服务主机

    在主机中托管我的服务后 我想要 svcutil exe 将是http www esimsol com evalservicesite eval svc wsdl 但是当我查看创建的服务 svcutil exe 时 链接如下 http win
  • 如何使用 Selenium webdriver 单击第二个提交按钮?

    Example 对于第一个按钮
  • 在主 Activity 中嵌入外部 Intent

    我见过许多使用 ActivityGroup 在单个视图中嵌入多个 Activites 的示例 在每种情况下 正在加载的活动都是当前应用程序的内部活动 此外 它们似乎都占据了整个视野 我想使用特定 MIME 类型的 Intent 启动外部活动
  • 将任务添加到 Build.scala

    该文件http www scala sbt org 0 13 0 docs Detailed Topics Tasks html http www scala sbt org 0 13 0 docs Detailed Topics Task
  • 查找名称包含字符串的所有文件[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我一直在寻找一个命令 该命令将从当前目录返回文件名中包含字符串的文件 我见过locate and find可以查找以某些内容开头的文件的命
  • NuGet 包管理器:“AutoMapper”已具有为“Microsoft.CSharp”定义的依赖项

    我尝试在 Visual Studio Premium 2012 上使用 NuGet 将 AutoMapper 添加为项目的依赖项 但失败 它说 手术失败 AutoMapper 已经定义了一个依赖项 微软 CSharp 我可以添加其他依赖项
  • Flutter 重定向到 initState 上的页面

    我有一个应用程序 您需要登录才能继续 例如使用 Google 我想在需要身份验证时重定向用户 但是当我运行Navigator of context pushNamed myroute 我收到以下错误 EXCEPTION CAUGHT BY
  • 如何从 firebase 中删除条目

    我正在探索 Firebase 的功能 我在如何使用 java 代码从 Firebase 中删除节点或条目时遇到了问题 我搜索了他们的API 网络版本确实提供了remove 函数 但java没有 有一个removeValue 方法上的Fire
  • FluentNHibernate Component.ColumnPrefix 未应用

    我最近升级了FluentNHibernate from v1 1 0 685 to v1 2 0 712 最新 对于NHibernate 2 1 我的问题似乎是使用的类Component ColumnPrefix 映射 例如 public
  • ret2libc 攻击不会生成 shell

    我执行了 ret2libc 一切正常 但 shell 没有生成 源代码是 include
  • JHipster 的正确 Eclipse 设置是什么?

    我在第一次尝试在 STS Eclipse 中编译 jhipster 项目时收到此错误 The type org springframework core NestedRuntimeException cannot be resolved I
  • 如何向 PyPi 分发类型提示?

    我致力于将 Python 3 5 类型提示添加到响应库中 但是当我测试进行分发时 sdist or bdist wheel 它没有安装我的 pyi文件 我可以看到它是发行版的一部分 但仅此而已 您可以在此处查看我在存储库中获得的内容 htt
  • 包含 jQuery $.post() 函数的函数的返回值

    我知道 AJAX 是异步的 等等 但我有以下代码 function doesUsernameExist element Check via AJAX POST if username already exists in the databa
  • 合并 2 个排序列表

    我被要求针对以下问题提出尽可能多的解决方案 编写一个函数 它接受两个数字列表 均假设为 按升序排列 并将它们合并到一个列表中 也在 升序 我的第一个解决方案是append list1 onto list2然后重新sort 然后我发现一个内置
  • Android Mono 中的自定义应用程序子类

    我试图创建一个 Android App Application 的子类来覆盖 OnCreate 但我无法让它工作 这是我的代码 namespace MonoAndroidAcra Application Debuggable true La
  • 如何访问 tcp 标头详细信息?

    就像我创建了套接字并将该套接字绑定到客户端一样 我能够连接两侧并能够发送任意数量的数据 它基本上是 TCP 套接字 我的问题是我想访问 TCP 标头详细信息以检查和设置某种操作的参数 但我无法做到这一点 我正在用户空间中工作 从套接字级别我
  • 如何使用 Mercurial“恢复”未更改的文件?

    我在我的计算机上安装了 Windows7 我必须更改所有权限 取得所有权 这显然 触及 了我的所有文件 现在所有内容似乎都被 修改 当我执行 hg status 时 但只有一些文件有实际更改 是否有一个命令我可以运行 以便我可以 提交 或
  • 如何在 wicket 1.5 中的页面加载时打开模式窗口

    我使用 wicket 1 4 x 一段时间 在这里找到的解决方案效果很好 如何在页面加载时打开模态对话框 https stackoverflow com questions 4765790 how to open modaldialog o
  • 如何在 VBA 中替换范围/选择范围内的 Microsoft Word 字符样式?

    我正在开发一个带有宏的 Word 2007 模板 该宏会将字符样式应用于所选文本 查找 替换功能似乎是一个很好的起点 但我认为我发现了一个错误 限制 导致宏无法按预期工作 这是我的 vba 代码 Sub restyleSelection D