ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 将题后的答案转变成每小题对应尾注的代码

[复制链接]

TA的精华主题

TA的得分主题

发表于 2023-3-11 16:44 | 显示全部楼层 |阅读模式
一套试卷,题后有每小题答案,目前想将题后的答案转为每小题对应的尾注,请问谁有代码吗?谢谢。
如果有现成的,就想偷个懒,求个现成的。

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-3-27 09:41 | 显示全部楼层
本想等个想在现成的,没想到使用的人少,我就自己将它解决了。以下代码要求必须是答案位于试卷的最后(不是题后,这个另有代码),答案开始部位必须以“{【参考答案】}”标记。由于时间匆忙,请大家指正。
Sub AfterKeytoEndNote()
                 With ActiveDocument.Content.Find '将软回车替换为硬回车
                    .ClearFormatting
                    With .Replacement
                        .ClearFormatting
                    End With
                    .Execute FindText:="^l", ReplaceWith:="^p", Format:=True, Replace:=wdReplaceAll
                End With
                With ActiveDocument.Content.Find        '去掉一个空格,该空格的前面不为空格或英文字符,该空格后不为空格且不包含在域中
                    .ClearFormatting
                    .Font.Underline = WdUnderline.wdUnderlineNone
                    .MatchWildcards = True
                    With .Replacement
                        .ClearFormatting
                    End With
                    .Execute FindText:="([!^32 a-zA-Z])([  ]{1})([!^32 ][!eq])", ReplaceWith:="\1\3", Format:=True, Replace:=wdReplaceAll
                End With
                With ActiveDocument.Content.Find '规范小数的正确写法
                    .ClearFormatting
                    .MatchWildcards = True
                    With .Replacement
                        .ClearFormatting
                    End With
                    .Execute FindText:="([0-9]{1,2})([.、])([(\(【一-龥])", ReplaceWith:="\1.\3", Format:=True, Replace:=wdReplaceAll
                End With
                With ActiveDocument.Content.Find '规范小数的正确写法
                    .ClearFormatting
                    .MatchWildcards = True
                    With .Replacement
                        .ClearFormatting
                    End With
                    .Execute FindText:="([^13])([0-9]{1,2})([,,.、·])([!0-9])", ReplaceWith:="\1\2.\4", Format:=True, Replace:=wdReplaceAll
                End With
                With ActiveDocument.Content.Find '规范小数的正确写法
                    .ClearFormatting
                    .MatchWildcards = True
                    With .Replacement
                        .ClearFormatting
                    End With
                    .Execute FindText:="([0-9])(.)([0-9])", ReplaceWith:="\1.\3", Format:=True, Replace:=wdReplaceAll
                End With
                With ActiveDocument.Content.Find '规范小数的正确写法
                    .ClearFormatting
                    .MatchWildcards = True
                    With .Replacement
                        .ClearFormatting
                    End With
                    .Execute FindText:="([0-9])([.])([0-9]{4}[年])", ReplaceWith:="\1.\3", Format:=True, Replace:=wdReplaceAll
                End With
                With ActiveDocument.Content.Find '将连续回车替换为一个回车
                    .ClearFormatting
                    With .Replacement
                        .ClearFormatting
                    End With
                    .Execute FindText:="^p^p", ReplaceWith:="^p", Format:=True, Replace:=wdReplaceAll
                End With
                Dim KeyParagraphs As Integer
                ActiveDocument.ActiveWindow.Selection.HomeKey Unit:=wdStory
                With ActiveDocument.ActiveWindow.Selection.Find
                    .ClearFormatting
                    .Text = "{【参考答案】}"
                    .Forward = True
                    .Execute
                    If .Found = False Then
                        MsgBox "没有找到关键字" & """" & "{【参考答案】}" & """" & "的位置,请标注。", MsgBoxStyle.Information, "注意:"
                        Exit Sub
                    End If
                End With
                KeyParagraphs = ActiveDocument.Range(0, Selection.Paragraphs(1).Range.End).Paragraphs.Count
                Dim m As Integer
                Dim n As Integer
                Dim i As Integer
                Dim c As Integer
                Dim ktStartp As Integer
                Dim keyStartp As Integer
                Dim nextkeyStartp As Integer
                Dim ktNo As Integer
                Dim KeyTxt As String
                Dim keyStartRange As Range
                Dim myParagraphs As Integer
                Dim str As String
                nextkeyStartp = KeyParagraphs
                Dim TotalKT As Integer
                For i = 1 To ActiveDocument.Range.Paragraphs.Count
                    str = ActiveDocument.Range.Paragraphs(i).Range.Text
                    If isTrue(str, 1) > 0 And Val(str) > ktNo Then
                        ktNo = CInt(Val(str))
                        TotalKT = TotalKT + 1
                    End If
                Next
                ktNo = 0
                MsgBox "共能找到答案" & TotalKT & "个。", vbInformation, "注意:"
               
                If ActiveDocument.Endnotes.Count > 0 Then
               
                    If MsgBox("已有尾注" & ActiveDocument.Endnotes.Count & "个,需要全删除才能进行后续过程,删吗?", vbYesNo, "注意:") = vbNo Then
                        Exit Sub
                    End If
                    For m = 1 To ActiveDocument.Endnotes.Count
                        ActiveDocument.Endnotes.Item(1).Delete
                    Next
                End If
                Application.ScreenUpdating = True
                For n = nextkeyStartp + 1 To ActiveDocument.Paragraphs.Count
                    If ActiveWindow.Selection.Tables.Count > 0 Then Exit For
                    ActiveDocument.Paragraphs(n).Range.Select
                    str = ActiveDocument.ActiveWindow.Selection.Text
                    If isTrue(str, 1) > 0 And Val(str) > ktNo Then
                        ktNo = CInt(Val(str))
                        keyStartp = ActiveDocument.Range(0, Selection.Paragraphs(1).Range.End).Paragraphs.Count
                        ActiveWindow.Selection.Collapse Direction:=wdCollapseEnd
                        ActiveWindow.Selection.MoveLeft Unit:=wdCharacter, Count:=1
                        If ktNo = TotalKT Then
                          Set keyStartRange = ActiveDocument.Range(ActiveDocument.Paragraphs(keyStartp).Range.Start, ActiveDocument.Paragraphs(ActiveDocument.Paragraphs.Count).Range.End)
                            GoTo 341
                        End If
                        For c = keyStartp + 1 To ActiveDocument.Paragraphs.Count
                            ActiveDocument.Paragraphs(c).Range.Select
                            str = ActiveDocument.ActiveWindow.Selection.Text
                            If isTrue(str, 1) > 1 And Val(str) > ktNo Then
                                nextkeyStartp = ActiveDocument.Range(0, Selection.Paragraphs(1).Range.End).Paragraphs.Count
                                Application.ScreenUpdating = True
                                Exit For
                            End If
                            If c = ActiveDocument.Paragraphs.Count Then
                                nextkeyStartp = ActiveDocument.Paragraphs.Count
                            End If
                        Next
                       Set keyStartRange = ActiveDocument.Range(ActiveDocument.Paragraphs(keyStartp).Range.Start, ActiveDocument.Paragraphs(nextkeyStartp - 1).Range.End)
341:
                        keyStartRange.Select
                        KeyTxt = ActiveWindow.Selection.Text
                        
                        ActiveDocument.ActiveWindow.Selection.HomeKey Unit:=wdStory
                        With ActiveDocument.ActiveWindow.Selection.Find
                            .ClearFormatting
                            .Text = "^p" & ktNo & "."
                            .Forward = True
                            .Execute
                            If .Found = True Then
                                ActiveWindow.Selection.Collapse Direction:=wdCollapseEnd
                                If ActiveDocument.Range(0, Selection.Paragraphs(1).Range.End).Paragraphs.Count < keyStartp Then
                                    ActiveDocument.Endnotes.Add ActiveWindow.Selection.Range, Text:=KeyTxt
                                End If
                            End If
                        End With
                    End If
                Next
                ActiveDocument.ActiveWindow.Selection.HomeKey Unit:=wdStory
                ActiveDocument.Endnotes.NumberStyle = WdNoteNumberStyle.wdNoteNumberStyleArabic
                Application.ScreenUpdating = True

End Sub
Public Function isTrue(ByVal sText As String, ByVal SelItem As Integer) As Integer
isTrue = 0
Dim reg
Set reg = CreateObject("vbscript.regexp")
Select Case SelItem
Case 1
    With reg
        .Global = True
        .IgnoreCase = True
        .Pattern = "\d{1,2}[.]"
        If .test(sText) Then
           isTrue = 1
        End If
    End With
Case 2
    With reg
        .Global = True
        .IgnoreCase = True
        .Pattern = "(^[【])([答])([案])([】])"
        If .test(sText) Then
           isTrue = 1
        End If
    End With
End Select
End Function

四川省宜宾市第四中学校2022-2023学年高二下学期3月月考生物试题.rar

159.39 KB, 下载次数: 12

题后答案转尾注 VBA

TA的精华主题

TA的得分主题

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

尾注是什么啊?怎么不是答案放在每道试题的后面?即题目+答案的形式

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-8-18 13:15 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
尾注有尾注的方便,题后有题后的方便,看你怎么使用。尾注在制卷时对排版影响相对较小。而且光标指在尾注编号处,答案文字也出来了。

TA的精华主题

TA的得分主题

发表于 2024-8-18 22:00 来自手机 | 显示全部楼层
thunor 发表于 2024-8-18 13:15
尾注有尾注的方便,题后有题后的方便,看你怎么使用。尾注在制卷时对排版影响相对较小。而且光标指在尾注编 ...

是为了打印的时候不显示答案,批改的时候用电脑对着答案批改吗

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-8-19 15:55 | 显示全部楼层
过客fppt 发表于 2024-8-18 22:00
是为了打印的时候不显示答案,批改的时候用电脑对着答案批改吗

这个看你怎么使用了,我个人认为排版时用它真的很方便。基本上所见即所得。

TA的精华主题

TA的得分主题

发表于 2024-8-19 16:51 来自手机 | 显示全部楼层
thunor 发表于 2024-8-19 15:55
这个看你怎么使用了,我个人认为排版时用它真的很方便。基本上所见即所得。

mmexport1724057381756.png
试题排序我都是直接用插件的,导航窗格中看得见

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-8-19 22:55 | 显示全部楼层
我一般是用自己的题库生成试题(有三万多道题) 3.png ,A4排好版,输出。然后利用自己的窗格助手进行一系列的处理, 1.png 2.png 比如生成页码、制卷好后学生卷删除尾注等。

TA的精华主题

TA的得分主题

发表于 2024-8-20 09:15 来自手机 | 显示全部楼层
thunor 发表于 2024-8-19 22:55
我一般是用自己的题库生成试题(有三万多道题),A4排好版,输出。然后利用自己的窗格助手进行一系列的处理 ...

如果要删除答案,在每一道题目后面添加上题目结束的标志,用通配符可以全部删掉啊,当然添加题目结束标志也可以用vba

另外那么大规模的试题组卷,你们不用学科网或菁优网的吗,这样还可以及时的搜到很多新的题目

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-8-20 10:26 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
用学科网,但是一些题具有基础性、代表性,选择下来后来需要时使用也很方便。每年全省各地、市的题也录入题库中,需要的话来年也可使用,而且导入题库也很方便。学科网、菁优网相对而言本省题较少,跟不上进度,不入多个本学科群上传的题丰富。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-12-25 15:49 , Processed in 0.043036 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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