ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[原创] word题库随机抽题测试程序

[复制链接]

TA的精华主题

TA的得分主题

发表于 2018-9-11 11:42 | 显示全部楼层 |阅读模式
本帖最后由 zhanglei1371 于 2018-9-11 11:45 编辑

花了一上午时间写的,可以用于从word题库中抽题。
优点在于可以保留特殊格式。如图片,上下标等都可以得以保存。
根据Excel的设定来随机抽取章节题目;
word按Excel随机抽题.jpg
001.jpg
003.jpg
★★★为查找标志,必须有。
使用时同时打开word和execl,点击按钮即可。


源码参考:
  1. Sub 按Excel设定抽题()
  2. Dim ex As Object, wb As Object, sh As Object, arr, brr, crr
  3. Dim rg As Range, rg1 As Range, rg2 As Range, rgtmp As Range
  4. Dim re As Object, TF As Boolean
  5.     Set re = CreateObject("VBSCRIPT.regexp")
  6.     re.Global = 1
  7.     re.MultiLine = 1
  8.     re.Pattern = "^\d+."
  9.     Set ex = GetObject(, "Excel.application")
  10.     Set rg = ActiveDocument.Range
  11.     For Each wb In ex.workbooks
  12.         If InStr(wb.Name, "抽题") Then exname = wb.Name: Exit For
  13.     Next
  14.     For Each Doc In Documents
  15.         If InStr(Doc.Name, "抽题") Then wdname = Doc.Name: Exit For
  16.     Next
  17.     Set docN = Documents.Add
  18.     Set ADoc = Documents(wdname)
  19.     Set sh = ex.workbooks(exname).worksheets(1)
  20.     en_num = sh.Range("A635536").End(3).Row
  21.     arr = sh.Range("A3:C" & en_num)
  22.     For i = 1 To UBound(arr, 1)
  23.         With rg.Duplicate.Find
  24.             If .Execute("★★★" & arr(i, 1), , , 1) Then
  25.                 st = .Parent.Start
  26.                 .Parent.Collapse 0
  27.                 If .Parent.Find.Execute("★★★") Then
  28.                     Set rg1 = ADoc.Range(st, .Parent.End - 3)
  29.                     total_tishu = re.Execute(rg1).Count
  30.                     brr = 获取随机数(arr(i, 3), total_tishu)
  31.                     With rg1.Find
  32.                         For Each m In brr
  33.                             If .Execute("(^13)" & m & "." & "*参考答案[!^13]@^13", , , 1) Then
  34.                                 If Not .Parent.InRange(rg1) Then MsgBox "查找的目标超出给定章节范围之外!": Exit Sub
  35.                                 .Parent.MoveStart 1, 1
  36.                                 docN.Bookmarks("\EndofDoc").Range.FormattedText = .Parent.FormattedText
  37.                                 .Parent.MoveEnd 1, -1
  38.                             End If
  39.                             .Parent.Collapse 0
  40.                         Next
  41.                     End With
  42.                 End If
  43.             End If
  44.         End With
  45.     Next
  46.     Set ex = Nothing
  47.     MsgBox "恭喜,已完成!"
  48. End Sub

  49. Function 获取随机数(a, b)
  50. Dim num()
  51.     Randomize
  52.     Do While n < CInt(a)
  53.         ReDim Preserve num(n)
  54.         temp = Int((b * Rnd) + 1)
  55.         If n > 0 Then
  56.             For i = 0 To UBound(num)
  57.                 If num(i) = temp Then
  58.                     TF = True
  59.                     Exit For
  60.                 End If
  61.             Next
  62.         End If
  63.         If TF = False Then
  64.             num(n) = temp
  65.             n = n + 1
  66.         End If
  67.         TF = False
  68.     Loop
  69.    WordBasic.sortarray num
  70.    获取随机数 = num
  71. End Function
复制代码


附件:


20.gif

word题库抽题.rar

74.68 KB, 下载次数: 585

评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2018-9-11 13:18 | 显示全部楼层
感谢楼主分享!

TA的精华主题

TA的得分主题

发表于 2018-9-11 13:22 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
测试运行提示下标越界。

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-9-11 13:38 来自手机 | 显示全部楼层
不经意的回头 发表于 2018-9-11 13:22
测试运行提示下标越界。

那是你电脑问题。刚换了台电脑测试过,一切正常。

TA的精华主题

TA的得分主题

发表于 2018-9-11 16:08 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
强!收藏学习,谢谢分享!

TA的精华主题

TA的得分主题

发表于 2018-9-11 17:47 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
C2:C16=RAND()

D2:D16{=IF(C2>=LARGE((LOOKUP(ROW(A$2:A$16),ROW(A$2:A$16)/(A$2:A$16<>""),A$2:A$16)=LOOKUP(1,0/(A$2:A2<>""),A$2:A2))*C$2:C$16,VLOOKUP(LOOKUP(1,0/(A$2:A2<>""),A$2:A2),E:F,2)),"V","")

H2:H16{=IFERROR(INDEX(B:B,RIGHT(LARGE(IF(D$2:D$16="V",INT(C$2:C$16/1%)/1%+ROW(A$2:A$16)),ROW(A1)),2)),"")
4973.png

TA的精华主题

TA的得分主题

发表于 2019-3-12 20:53 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
老师,你好,帮我编一个抽题程序吧,我是小白

3.配电专业题库1 - 单选.rar

55.81 KB, 下载次数: 46

TA的精华主题

TA的得分主题

发表于 2019-3-16 20:09 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2019-3-20 12:18 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
楼主干得很好,佩服。

TA的精华主题

TA的得分主题

发表于 2019-3-31 15:26 | 显示全部楼层
感谢分享!

补充内容 (2019-7-31 15:31):
没有明白六楼的意思。还望指教。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-24 14:37 , Processed in 0.033814 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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