ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 1324|回复: 7

[求助] 如何检查文档中是否有答案及整理答案?

[复制链接]

TA的精华主题

TA的得分主题

发表于 2015-11-2 15:35 | 显示全部楼层 |阅读模式
文档是选择题习题,复制来的时候有的有答案有的没有答案,如何用vba检查哪题没有答案后跳转到题目呢?
我查了一下,答案是一个单独的字母如"A",""B,"C","D"或者为”答案:And“,如果字母后有.号的为选择项的题目待选项
全部都有答案后如何删了题目中的答案,而把答案放在文档尾呢?格式为
答案:
1-5  BDBAC   
6-10  ABCAD
新建 Microsoft Word 文档.zip (4.32 KB, 下载次数: 46)





TA的精华主题

TA的得分主题

发表于 2015-11-3 16:48 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 kqbt 于 2015-11-4 19:40 编辑

先试一下能否将答案整理为统一格式:
  1. Sub 整理答案()
  2.   With ActiveDocument.Content.Find
  3.     .ClearFormatting
  4.     .Replacement.ClearFormatting
  5.     .Execute "([!^13:])([A-D]@)([!.]*D.*^13)", , , True, , , , , , "\1\3答案:\2", wdReplaceAll
  6.   End With
  7. End Sub
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-11-3 20:37 | 显示全部楼层
kqbt 发表于 2015-11-3 16:48
先试一下能否将答案整理为统一格式:

你的意思是先给答案统一格式,再来查找?
你的代码有用,但是有一种情况不会算是,就是在选择题后的答案,不会整理成“答案:?”的格式
比如下题:
3.第十二届全国人民代表大会第三次会议3月5日上午在人民大会堂开幕。国务院总理李克强向大会作政府工作报告时指出,时代赋予中国发展兴盛的历史机遇。我们要紧密团结在以习近平同志为总书记的党中央周围,高举中国特色社会主义伟大旗帜,凝神聚力,开拓创新,努力完成今年经济社会发展目标任务,为实现( )奋斗目标、建成富强民主文明和谐的社会主义现代化国家、实现中华民族伟大复兴的中国梦作出新的更大贡献。
A.“全面建成小康                B.“两个一百年”                C.“中国梦”                D.“实现区域协调发展”
B

TA的精华主题

TA的得分主题

发表于 2015-11-4 19:41 | 显示全部楼层
  1. Sub 整理答案()
  2.   With ActiveDocument.Content
  3.     .Font.Size = 10.5
  4.     With .Find
  5.       .ClearFormatting
  6.       .Replacement.ClearFormatting
  7.       .Execute "^b", , , False, , , , , , "^p", wdReplaceAll
  8.       .Execute "[^11^13]{1,}", , , True, , , , , , "^p", wdReplaceAll
  9.       .Execute "[^13 ^32^s^t]@([B-D].)", , True, , , , , , , "^p\1", wdReplaceAll
  10.       .Execute "([!::])([A-D]@)([!..]*)([0-9]@[..])", , , True, , , , , , "\1\3答案:\2^p\4", wdReplaceAll
  11.       .Execute "[^11^13]{1,}", , , True, , , , , , "^p", wdReplaceAll
  12.     End With
  13.   End With
  14. End Sub
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-11-5 23:04 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

谢谢!
上次代码是第3题不能整理,其它可以
这次第3题可以了,可是第5题又不行了
见附件 新建 Microsoft Word 文档.zip (10.33 KB, 下载次数: 9)

TA的精华主题

TA的得分主题

发表于 2015-11-6 20:51 | 显示全部楼层
sblisb 发表于 2015-11-5 23:04
谢谢!
上次代码是第3题不能整理,其它可以
这次第3题可以了,可是第5题又不行了

如果只有几道题,我觉得没有多大的意义。如果题量较大,最好多上传一些题,以便测试各种情形。
针对楼上提到的第5题无法处理,准确的说应该是最后一道题无法处理……因为所用通配符是通过上一道题的题号与下一道题的题号来进行定位处理的。

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-11-6 23:02 | 显示全部楼层
kqbt 发表于 2015-11-6 20:51
如果只有几道题,我觉得没有多大的意义。如果题量较大,最好多上传一些题,以便测试各种情形。
针对楼上 ...

谢谢,一个练习都是100题的,所以才想要代码简化工作
这五种把各种写答案的情况都考虑到了,上传太多题目看得眼花呀
最后一题不好处理就手动处理吧,现在整理好了,如何提取答案呢?

TA的精华主题

TA的得分主题

发表于 2015-11-7 09:50 | 显示全部楼层
本帖最后由 kqbt 于 2015-11-7 11:23 编辑
sblisb 发表于 2015-11-6 23:02
谢谢,一个练习都是100题的,所以才想要代码简化工作
这五种把各种写答案的情况都考虑到了,上传太多题 ...

还是分为两个过程吧:
  1. Sub 整理题号及答案()
  2.   Dim wRng As Range, aStr As String
  3.   Dim cNum As Integer
  4.   Set wRng = ActiveDocument.Content
  5.   With wRng
  6.     .Font.Size = 10.5
  7.     With .Find
  8.       .ClearFormatting
  9.       .Replacement.ClearFormatting
  10.       .Execute "^m", , , False, , , , , , "^p", wdReplaceAll
  11.       .Execute "^b", , , False, , , , , , "^p", wdReplaceAll
  12.       .Execute "[^13 ^32^s^t]@([B-D].)", , True, , , , , , , "^p\1", wdReplaceAll
  13.       .Execute "([!::])([A-D]@)([!.]*)([0-9]@.)", , , True, , , , , , "\1\3答案:\2^p\4", wdReplaceAll
  14.       .Execute "[^11^13]{1,}", , , True, , , , , , "^p", wdReplaceAll
  15.       cNum = 1
  16.       Do While .Execute("^13[0-9]@.", , , True)
  17.         If wRng <> Chr(13) & cNum & "." Then
  18.           wRng.Text = Replace(wRng, Mid(wRng, 2, Len(wRng) - 2), cNum)
  19.         End If
  20.         cNum = cNum + 1
  21.       Loop
  22.       wRng.SetRange wRng.End, ActiveDocument.Content.End
  23.       If .Execute("[!::][A-D]@[!.]", , , True, , , True) Then
  24.         aStr = Mid(wRng, 2, Len(wRng) - 2)
  25.         wRng.Delete
  26.         ActiveDocument.Content.InsertAfter "答案:" & aStr
  27.       End If
  28.     End With
  29.   End With
  30. End Sub
复制代码
  1. Sub 提取答案()
  2.   Dim wRng As Range, nRng As Range
  3.   Dim cNum As Integer, aStr As String
  4.   cNum = 1
  5.   Set wRng = ActiveDocument.Content
  6.   With wRng.Find
  7.     .ClearFormatting
  8.     .Replacement.ClearFormatting
  9.     Do While .Execute(Chr(13) & cNum + 1 & ".", , , False)
  10.       wRng.Collapse wdCollapseStart
  11.       Set nRng = wRng.Paragraphs(1).Range
  12.       If nRng Like "答案[::][A-D]" & Chr(13) Then
  13.         aStr = aStr & cNum & Replace(Right(nRng, 2), Chr(13), "") & Chr(9)
  14.         nRng.Delete
  15.       Else
  16.         aStr = aStr & cNum & "?" & Chr(9)
  17.       End If
  18.       cNum = cNum + 1
  19.     Loop
  20.     Set nRng = ActiveDocument.Paragraphs.Last.Range
  21.     If nRng Like "答案[::][A-D]" & Chr(13) Then
  22.       aStr = aStr & cNum & Replace(Right(nRng, 2), Chr(13), "")
  23.       nRng.Select
  24.       nRng.Delete
  25.     Else
  26.       aStr = aStr & cNum & "?"
  27.     End If
  28.     ActiveDocument.Content.InsertAfter Chr(13) & "【答案】" & Chr(13) & aStr
  29.   End With
  30. End Sub
复制代码


您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2025-1-15 18:15 , Processed in 0.026926 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表