当前位置: 首页 > news >正文

Word VBA快速制作试卷(2/2)

实例需求:英语听力题目及其答案(题目编号之前括号内字母为答案)如下所示。

在这里插入图片描述

现在需要将文档整理为如下格式:

  • 第一部分为听力题目,擅长每个题目编号之前的答案(包含括号)
  • 增加一个段落“参考答案”
  • 第3部分为听力题目含参考答案,并修改英语如下格式
    – 题目编号之前的答案应用红色字体
    – 题目答案选项应用红色字体和下划线

其效果如下图所示。

在这里插入图片描述

Sub Demo()Dim oDoc As Document: Set oDoc = ActiveDocumentDim oRng As Range: Set oRng = oDoc.RangeDim iEnd As Long: iEnd = oRng.EndoRng.CopyoRng.InsertParagraphAfteroRng.Paragraphs.Last.Range.ListFormat.RemoveNumbers NumberType:=wdNumberParagraphoRng.Characters.Last.InsertAfter vbCr & "参考答案" & vbCroRng.Collapse Direction:=wdCollapseEndoRng.PasteDim pasteRange As RangeSet pasteRange = oRngIf pasteRange.ListFormat.ListType <> wdListNoNumbering ThenpasteRange.ListFormat.ApplyListTemplate ListTemplate:=ListGalleries(wdNumberGallery).ListTemplates(1), ContinuePreviousList:=FalseEnd IfDim oAnswer As Range, sAnswer As StringWith pasteRange.Find.ClearFormatting.Wrap = wdFindStop.MatchWildcards = True.Text = "\( [A-Z] \)"Do While .ExecuteWith .ParentsAnswer = Trim(Mid(.Text, 2, Len(.Text) - 2))Set oAnswer = .Paragraphs(1).Next.Range.Font.ColorIndex = wdRedEnd WithWith oAnswer.Find.ClearFormatting.Wrap = wdFindStop.MatchWildcards = True.Text = sAnswer & "\. <*>\.".Replacement.Font.ColorIndex = wdRed.Replacement.Font.Underline = wdUnderlineSingle.Execute Replace:=wdReplaceAllEnd WithLoopEnd WithSet oRng = oDoc.Range(0, iEnd)With oRng.Find.ClearFormatting.Replacement.ClearFormatting.Text = "\( [A-Z] \)".Replacement.Text = "".Forward = True.Wrap = wdFindStop.Format = False.MatchCase = False.MatchWholeWord = False.MatchByte = False.MatchAllWordForms = False.MatchSoundsLike = False.MatchWildcards = True.Execute Replace:=wdReplaceAllEnd With
End Sub

【代码解析】
第2行代码获取当前活动文档对象,并赋值给变量 oDoc。
第3行代码获取整个文档的范围Range对象,用于后续内容操作。
第4行代码记录当前文档末尾位置的字符索引,用于后续定位处理前的内容(即原始文档内容)。
第5行代码将整个文档复制到剪贴板。
第6行代码在文档末尾插入一个新的段落,以便后续插入答案内容。
第7行代码移除最后一个段落中可能存在的编号格式,确保复制内容时格式统一。
第8行代码在文档末尾插入段落标记和“参考答案”(作为一个单独段落),用于标识复制内容的开始。
第9行代码将范围折叠到末尾,准备粘贴剪贴板中的内容。
第10行代码将先前复制的内容粘贴到“参考答案”段落之后。
粘贴操作完成之后,oRng对象将代表新粘贴的文档内容,即oRng的范围发生了变化。
第11行代码定义一个新的范围对象 pasteRange,用于表示刚刚粘贴的答案区域。
第12行代码将 pasteRange 设置为粘贴内容。
第13-15行代码判断 pasteRange 是否存在编号,如果存在则重新应用编号样式,使粘贴内容具有统一格式。

第16行代码定义两个变量用于存储当前查找到的答案内容和操作范围。
第21行代码配置查找条件,使用通配符查找模式\( [A-Z] \),查找形如( A )的选项格式。
第22~37行代码为查找循环,逐个处理答案标记。
第23~27行代码提取选项字母(去除括号),并标红原始答案位置。
第28-36行代码在答案区域查找与选项内容匹配的题干项(如 A. 正确),将其字体颜色设置为红色,并加下划线,标示正确答案。

第39行代码重新设置范围对象 oRng 为从文档开头到原始末尾(iEnd)之前的内容(即不包括新粘贴的“参考答案”及其之后的内容),准备查找操作。
第43~44行代码设置查找条件,并将其替换为空字符串,删除所有题目前的答案选项编号。
第54行执行全部替换。

http://www.dtcms.com/a/303111.html

相关文章:

  • 【华为机试】5. 最长回文子串
  • 学习人工智能所需知识体系及路径详解
  • 记录几个SystemVerilog的语法——随机
  • 五自由度磁悬浮轴承转子:基于自适应陷波器的零振动攻克不平衡质量扰动的终极策略
  • (45) QT 提供了一个功能,以同步现代操作系统的编辑功能,在标题栏上显示 * 占位符,以显示窗体上发生了未被保存的修改
  • 三维插件 Forest 深度解析:打造高效逼真的自然环境
  • 命令执行漏洞
  • 计算机毕设分享-基于SpringBoot的健身房管理系统(开题报告+前后端源码+Lun文+开发文档+数据库设计文档)
  • USRP-X440 雷达目标发生器
  • 深入解析 Java Stream 设计:从四幕剧看流水线设计与执行机制
  • 对于ui=f(state)的理解(react)
  • Redis四种GetShell方式完整教程
  • 使用Docker在Rocky Linux 9.5上在线部署LangFlow
  • 【STM32编码器接口测速】实现测速功能
  • 删除二维特征图中指定区域的样本
  • linux系统----Ansible中的playbook简单应用
  • 【Java EE】多线程-初阶-线程的状态
  • java里List链式编程
  • 4、如何生成分布式ID?
  • Linux->模拟实现 fopen/fread/fwrite
  • Bruce Momjian 深圳 meetup 回顾
  • 大模型基础设施搭建 - 操作系统centos7
  • SDRAM
  • CTF-Web学习笔记:文件包含篇
  • 阿里给AI To C战略戴上眼镜
  • 4.应用层自定义协议与序列化
  • JUC线程池: ScheduledThreadPoolExecutor详解
  • VMWARE -ESXI-ntp时间同步无法启动异常处理
  • Go-Elasticsearch Typed Client 使用命名、结构与约定
  • Java 大视界 -- Java 大数据在智能安防入侵检测系统中的多源数据融合与误报率降低策略(369)