[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] 求批处理把1份复习题 自动生成试卷

https://wwd.lanzouq.com/iCXQt049xfcj   所有文件在这里

目前有一份WORD复习题,想实现:
1、把生成一份测试试卷,把这份复习题中的每个红色字替换为4个“_”。
2、删除每题中的非红色字,仅保留红字,某题中如果有多组红字,则用一个全角空格隔开。前面的题号与第1步中对应不变。
3、将第2步中生成的内容追加到第1步的文件尾部,追加前插入“试题答案”字样,占一行。
PS:至此试卷部分题号是1-90题,答案部分题号也是1-90。
4、对项目编号进行文本化处理,即试卷和答案的题号都调整为普通文字。
Sub 项目编号文本化()
ActiveDocument.Content.ListFormat.ConvertNumbersToText
End Sub
  我用这个 但是之后会有一个“制表符”得替换删除,参考。
5、生成的文件名,和原文件名相同在后加“_试卷”。


就是把一份复习题,生成一份试卷,后面追加答案。

谢谢师兄,辛苦。

Module1.bas
这是vba模块,导入就行
  1. Attribute VB_Name = "Module1"
  2. Sub NewExam2()
  3. Attribute NewExam2.VB_Description = "生成试题和答案,在同一文档docx"
  4. Attribute NewExam2.VB_ProcData.VB_Invoke_Func = "Normal.Module1.NewExam2"
  5. ' 宏
  6. ' 生成新试题和答案
  7. '
  8. On Error Resume Next
  9. Const ExamName As String = "_试卷.docx"
  10. Dim docSrc As Document, docExam As Document
  11. Dim i As Long, oRange As range, oRange2 As range, itempara As Paragraph
  12. Dim fso, examPath As String
  13. Set fso = CreateObject("Scripting.FileSystemObject")
  14. Set docSrc = ActiveDocument
  15. If docSrc Is Nothing Then Exit Sub
  16. examPath = fso.BuildPath(docSrc.Path, fso.GetBaseName(docSrc.Name) & ExamName)
  17. If fso.FileExists(examPath) Then fso.DeleteFile examPath, True
  18. If Err.Number <> 0 Then Exit Sub
  19. docSrc.SaveAs2 examPath
  20. Set docExam = ActiveDocument
  21. Application.ScreenUpdating = False
  22. docExam.ConvertNumbersToText
  23. Set oRange = docExam.Content
  24. oRange.SetRange oRange.Paragraphs(2).range.Start, oRange.End - 1
  25. With oRange.Find
  26.     .ClearFormatting
  27.     .Text = "(^t{1,})"
  28.     .MatchWildcards = True
  29.     With .Replacement
  30.         .ClearFormatting
  31.         .Text = ""
  32.     End With
  33.     .Execute Replace:=wdReplaceAll
  34. End With
  35. oRange.Copy
  36. Selection.EndKey wdStory
  37. Selection.InsertNewPage
  38. Selection.EndKey wdStory
  39. Selection.InsertAfter "试题答案:"
  40. Selection.InsertParagraphAfter
  41. Selection.EndKey wdStory
  42. Set oRange2 = Selection.range
  43. oRange2.Paste
  44. With oRange.Find
  45.     .ClearFormatting
  46.     .Font.ColorIndex = wdRed
  47.     .Format = True
  48.     .Text = "*"
  49.     .MatchWildcards = True
  50.     With .Replacement
  51.         .ClearFormatting
  52.         .Font.ColorIndex = wdAuto
  53.         .Text = "____"
  54.     End With
  55.     .Execute Replace:=wdReplaceAll
  56. End With
  57. For Each itempara In oRange2.Paragraphs
  58.     With itempara.range
  59.         .MoveStartUntil "."
  60.         .MoveStart wdCharacter, 1
  61.         .MoveEnd wdCharacter, -1
  62.         With .Find
  63.             .ClearFormatting
  64.             .Font.ColorIndex = wdAuto
  65.             .Format = True
  66.             .Text = "*"
  67.             .MatchWildcards = True
  68.             With .Replacement
  69.                 .ClearFormatting
  70.                 .Text = " "
  71.             End With
  72.             .Execute Replace:=wdReplaceAll
  73.             .ClearFormatting
  74.             .Format = False
  75.             .Text = "( {1,})"
  76.             .MatchWildcards = True
  77.             With .Replacement
  78.                 .Text = " "
  79.             End With
  80.             .Execute Replace:=wdReplaceAll
  81.         End With
  82.         .Font.ColorIndex = wdRed
  83.         .Text = Trim$(.Text)
  84.     End With
  85. Next
  86. docExam.Save
  87. 'docExam.Close
  88. Set fso = Nothing
  89. Application.ScreenUpdating = True
  90. MsgBox "生成试题和答案完成."
  91. End Sub
复制代码
2

评分人数

    • 5i365: 技术牛X, 乐于分享技术 + 1
    • for_flr: 乐于助人技术 + 1
微信:flashercs
QQ:49908356

TOP

回复 2# flashercs


    测试成功 感谢

TOP

本帖最后由 sf2022 于 2022-5-5 12:32 编辑

回复 2# flashercs

为什么生成的文件关闭后,就再也打不开了

能把代码改成VBS吗?或其他的,运行后 对当前目录下的所有WROD生效

谢谢

TOP

请教大佬,如果用powershell,如何匹配到颜色字体

TOP

回复 2# flashercs


   感谢大侠分享, 要是能改成ps代码,就更好了, vba 看不懂
本人所发所有贴子或代码, 诸大侠若认为有改进之处,请不吝赐教,感激不尽!

TOP

返回列表