ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

我有一张试卷附带有答案,如何才能用宏把答案填写到正确的位置呢?谢谢

[复制链接]

TA的精华主题

TA的得分主题

发表于 2011-10-22 08:26 | 显示全部楼层
tangqingfu 发表于 2011-10-22 07:59
谢谢sylun兄的分享!
时间关系,没办法详细学习和消化代码.
请教如果答案已在题目中,如何将其提取出来放在题 ...

是啊,咱也有这个想法,能否赐教。谢谢!

TA的精华主题

TA的得分主题

发表于 2011-10-22 09:02 | 显示全部楼层
tangqingfu 发表于 2011-10-22 07:59
谢谢sylun兄的分享!
时间关系,没办法详细学习和消化代码.
请教如果答案已在题目中,如何将其提取出来放在题 ...

“题目与答案分离”比“把答案填写到正确的位置”更有实用价值。参考软件《化学金排》,它这两个功能都有。

TA的精华主题

TA的得分主题

发表于 2011-10-22 10:46 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
chuhaiou 发表于 2011-10-22 09:02
“题目与答案分离”比“把答案填写到正确的位置”更有实用价值。参考软件《化学金排》,它这两个功能都有 ...

谢谢chuhaiou兄!
主要是想学习一下处理方法,不知chuhaiou兄能否分享一下相关代码?

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-10-22 19:12 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
sylun 发表于 2011-10-21 17:46
试做了一下,有点复杂:

sylun辛苦了,在下还有事相求,不知可否回复。这里先行谢过。
请问, .Text = "^13[0-9]@.[!^13]{1,}"这究竟是代表什么?如能指教,不胜感激
还有,如果我想把选择题的正确答案变成红色醒目字体,要如何改呢?
未命名.jpg

TA的精华主题

TA的得分主题

发表于 2011-10-22 20:18 | 显示全部楼层
好,参考一下。。。。。。。。

TA的精华主题

TA的得分主题

发表于 2011-10-22 20:59 | 显示全部楼层
本帖最后由 sylun 于 2011-10-22 21:04 编辑
cumulonimbus 发表于 2011-10-22 19:12
sylun辛苦了,在下还有事相求,不知可否回复。这里先行谢过。
请问, .Text = "^13[0-9]@.[!^13]{1,}"这 ...

请问, .Text = "^13[0-9]@.[!^13]{1,}"这究竟是代表什么?如能指教,不胜感激

这些查找代码文本其实就是查找替换高级用法中所涉及的字符代码及通配符,这是查找替换方面的知识,想具体了解,请查找一下word的帮助文件或在本版中搜索相关帖子。
还有,如果我想把选择题的正确答案变成红色醒目字体,要如何改呢?

前面代码修改为用红色并加粗字体标注答案:
  1. Sub test2()
  2.     Dim a() As String, i As Integer
  3.     Dim aa() As String, c As Integer, n As Integer
  4.     Dim TF As Boolean, s As Long
  5.     Dim myRange As Range
  6.     Application.ScreenUpdating = False
  7.     With ActiveDocument.Content.Find
  8.         '搜集答案信息部分
  9.         .Text = "填空题"
  10.         .Forward = False
  11.         .MatchWildcards = True
  12.         If .Execute Then .Forward = True
  13.         .Text = "^13[0-9]@.[!^13]{1,}"
  14.         .Parent.Collapse wdCollapseEnd
  15.         Do While .Execute
  16.             ReDim Preserve a(i)
  17.             a(i) = .Parent.Text
  18.             a(i) = Trim(Mid(a(i), InStr(a(i), ".") + 1))
  19.             i = i + 1
  20.             If i > 60 Then Exit Do  '填空题共有61题
  21.         Loop
  22.         .Parent.Collapse wdCollapseEnd
  23.         Do While .Execute("[0-9]@.[∨×]")
  24.             ReDim Preserve a(i)
  25.             a(i) = .Parent.Text
  26.             a(i) = Trim(Mid(a(i), InStr(a(i), ".") + 1))
  27.             i = i + 1
  28.         Loop
  29.         .Parent.Collapse wdCollapseEnd
  30.         Do While .Execute("[0-9]@.[A-F]{1,}")
  31.             ReDim Preserve a(i)
  32.             a(i) = .Parent.Text
  33.             a(i) = Trim(Mid(a(i), InStr(a(i), ".") + 1))
  34.             i = i + 1
  35.         Loop
  36.         
  37.        '定位填写答案部分
  38.         .Parent.WholeStory
  39.         i = 0
  40.         .Text = ""
  41.         .Font.Underline = wdUnderlineSingle
  42.         .Format = True
  43.         Do While .Execute
  44.             If .Parent.Text <> Chr(13) Then
  45.                 If TF = False Then
  46.                     aa = Split(a(i), Chr(32))
  47.                     TF = True
  48.                 End If
  49.                 For n = c To UBound(aa)
  50.                     c = c + 1
  51.                     If aa(n) <> Empty Then
  52.                         With .Parent
  53.                             .Text = Chr(32) & aa(n) & Chr(32)
  54.                             .Font.Color = wdColorRed
  55.                             .Bold = True
  56.                         End With
  57.                         
  58.                         If n = UBound(aa) Then
  59.                             i = i + 1
  60.                             c = 0
  61.                             TF = False
  62.                         End If
  63.                         Exit For
  64.                     End If
  65.                 Next
  66.             End If
  67.             .Parent.Collapse wdCollapseEnd
  68.         Loop
  69.         .Format = False
  70.         .Text = "(^32{4,})"
  71.         Do While .Execute
  72.             With .Parent  '一道选择题如有两个以上括号,答案只在第一个括号内
  73.                 If .Paragraphs.First.Range.Start > s Then
  74.                     .SetRange .Start + 2, .End - 2
  75.                     .Text = a(i)
  76.                     If a(i) Like "*[!A-F]*" = False Then
  77.                         Set myRange = .Duplicate
  78.                         myRange.Collapse wdCollapseEnd
  79.                         With myRange.Find
  80.                             .MatchWildcards = True
  81.                             .Replacement.Font.Bold = True
  82.                             .Replacement.Font.Color = wdColorRed
  83.                             For c = 1 To Len(a(i))
  84.                                 .Text = Mid(a(i), c, 1) & "[..]*^13"
  85.                                 .Execute Replace:=wdReplaceOne
  86.                                 .Parent.Collapse wdCollapseEnd
  87.                             Next
  88.                         End With
  89.                     End If
  90.                     s = .Paragraphs.First.Range.Start
  91.                     i = i + 1
  92.                 End If
  93.                 .Collapse wdCollapseEnd
  94.             End With
  95.         Loop
  96.     End With
  97.     Application.ScreenUpdating = True
  98. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2011-10-22 21:57 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
向sylun 学习.

TA的精华主题

TA的得分主题

发表于 2011-10-22 22:47 | 显示全部楼层
WORD  也得用得如此出神入化,真是佩服

TA的精华主题

TA的得分主题

发表于 2011-10-23 19:11 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 sylun 于 2011-10-23 19:13 编辑

抱歉,提取答案部分的代码试了几次也无法上传,提示有不良信息,只好慢慢试了,真是晕啊

TA的精华主题

TA的得分主题

发表于 2011-10-23 19:15 | 显示全部楼层
先试代码的前半部分
  1. Sub GetAnswer()
  2.     Dim TF As Boolean, a As String, b As String, c As String, d As String
  3.     Dim txt As String, i1 As Integer, i2 As Integer, i3 As Integer, i4 As Integer
  4.     Dim n As Integer, s As Long, info As String
  5.     Application.ScreenUpdating = False
  6.     '提取答案内容
  7.     If MsgBox("提取答案时是否同时删除试题中的答案文本?", vbYesNo) = vbYes Then TF = True
  8.     With ActiveDocument.Content.Find
  9.         .Font.Underline = wdUnderlineSingle
  10.         .Format = True
  11.         Do While .Execute
  12.             With .Parent
  13.                 If Val(.Paragraphs.First.Range.Text) > n Or Val(.Previous(wdParagraph).Text) > n Then
  14.                     n = Val(IIf(Val(.Paragraphs.First.Range.Text) > n, .Paragraphs.First.Range.Text, .Previous(wdParagraph).Text))
  15.                     If .Text <> Chr(13) Then a = a & vbCrLf & n & "." & Trim(.Text)
  16.                 ElseIf .Text <> Chr(13) Then
  17.                     a = a & Space(4) & Trim(.Text)
  18.                 End If
  19.                 If TF = True And .Text Like "*[!" & Chr(13) & Chr(32) & "]*" Then .Text = Space(Len(.Text))
  20.                 .Collapse wdCollapseEnd
  21.             End With
  22.         Loop
  23.         .Parent.WholeStory
  24.         .Format = False
  25.         .Text = "([^32∨×A-F]@)"
  26.         .MatchWildcards = True
  27.         Do While .Execute
  28.             With .Parent  '一道选择题如有两个以上括号,答案只在第一个括号内
  29.                 .SetRange .Start + 2, .End - 2
  30.                 txt = Trim(.Text)
  31.                 If .Paragraphs.First.Range.Start > s And Len(Trim(.Text)) > 0 Then
  32.                     If txt Like "[∨×]" Then
  33.                         i2 = i2 + 1
  34.                         b = b & i2 & "." & txt & IIf(i2 Mod 5 > 0, vbTab, vbCrLf)
  35.                     ElseIf txt Like "[A-F]" Then
  36.                         i3 = i3 + 1
  37.                         c = c & i3 & "." & txt & IIf(i3 Mod 5 > 0, vbTab, vbCrLf)
  38.                     ElseIf Len(txt) > 1 Then
  39.                         i4 = i4 + 1
  40.                         d = d & i4 & "." & txt & IIf(i4 Mod 5 > 0, vbTab, vbCrLf)
  41.                     End If
  42.                     If TF = True Then .Text = Space(IIf(Len(txt) = 1, 2, 6))
  43.                 End If
  44.                 s = .Paragraphs.First.Range.Start
  45.                 .Collapse wdCollapseEnd
  46.             End With
  47.         Loop
  48.     End With
复制代码

评分

1

查看全部评分

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

本版积分规则

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

GMT+8, 2024-11-27 19:47 , Processed in 0.053679 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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