当前位置: 首页 > 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.lryc.cn/news/602794.html

相关文章:

  • STM32——寄存器映射
  • 安宝特新闻丨安宝特与Logivations正式建立合作伙伴关系,共筑物流新未来
  • AI应用—C++在AI中的应用
  • 1.DRF 环境安装与配置
  • 《C++继承详解:从入门到理解公有、私有与保护继承》
  • Ansible+Shell框架中,如何管理敏感信息
  • [蓝牙通信] NimBLE init启动 | 时间抽象-转换
  • C语言基础第15天:从数组指针到指针函数
  • 快速构建基于React.js的用户注册与登录的Web应用程序
  • 图像识别边缘算法
  • 数学建模算法-day[13]
  • QGIS基于规则的道路分级制图及Leaflet集成展示实例
  • Polkadot 的 Web3 哲学:从乔布斯到 Gavin Wood 的数字自由传承
  • 开始记录一步步学习pcl
  • Go语言-->变量
  • DBAPI 实现分页查询的两种方法
  • 若依【(前后端分离版)SpringBoot+Vue3】
  • JVM 笔记:类加载、内存管理、垃圾收集与垃圾收集器
  • JVM 垃圾回收机制全景解析:从对象回收到收集算法
  • C++---初始化列表(initializer_list)
  • Flutter在购物场景中BLoC的应用
  • shell每日三题大神之路:第三天
  • 轻量级远程开发利器:Code Server与cpolar协同实现安全云端编码
  • AR眼镜:工业4.0时代高风险作业的安全守护者
  • 深度思考和搜索研究 最新的GSPO强化学习算法
  • 解决 xshell 无法连接win10 、win11的linux子系统
  • python每日一题练习
  • Java集合遍历的几种方式
  • 【docker】DM8达梦数据库的docker-compose以及一些启动踩坑
  • Thymeleaf th:object核心用法精解