|
楼主 |
发表于 2008-12-30 17:24
|
显示全部楼层
原帖由 tangqingfu 于 2008-12-30 13:19 发表
能否添加代码以大题的题号为标准对小题题号进行处理?
下面的完形填空附件,请sylun兄测试一下,用你的代码处理,没有反应.
添加应该可以,但感觉作用不是很大。因为程序运行时起码多了一个选择,对话时还要手要输入大题号,还不如直接选定某大题再运行程序来得方便(不考虑大题多选的情形)。程序只考虑基本需要,感觉还是不要为此改动吧?
至于附件的完形填空题,因其编号排版格式与程序有所不同,故搜索不到小题编号。可查看MySorting2过程的代码,将其中"[^9^11^13]A[..][!^9^11^13]{1,}"改为"[^9^11^13..]A[..][!^9^11^13]{1,}",将"[^9^11^13][A-H][..][!^9^11^13]{1,}"改为"[^9^11^13..][A-H][..][!^9^11^13]{1,}",这样应该可搜索到,其实与使用通配符的常规查找代码字符一样,楼主可视情况自行添加上去。
奇怪,按sylun兄提示的,将“自动套用格式”中的“直引号替换为弯引号”前的勾去除,还是有英文的单引号变成了中文的单引号的问题,有些会变,有些又不会变,请sylun兄帮测试一下
刚才测试,确实还有问题,以前也遇到过(可查看http://club.excelhome.net/thread-228840-1-1.html),还没有过多考究这个问题。要修正此结果,可试将主程序改为如下代码,实际上是在最后增加了一段查找并处理的代码:
Sub myStarting3()
'主程序
'主要针对试卷各组小题及其可能存在的选项的随机排序
Dim a As Integer, b As Integer, c As String, d As Integer
Set mySortRange = IIf(Selection.Type = wdSelectionIP, ActiveDocument.Content, Selection.Range)
a = MsgBox("在正式开始处理前,请您先进行如下四项设定:" & vbCrLf & vbCrLf _
& "第一项:需要对小题进行随机排序吗?", vbYesNoCancel)
If a = 2 Then Exit Sub
b = MsgBox("第二项:需要对小题中的选项进行随机排序吗?", vbYesNoCancel)
If b = 2 Then Exit Sub
c = InputBox("第三项:此项用于设置所选区域的各小题是否为连续编号。请输入大题编号的如下格式代码:" & vbCrLf & vbCrLf _
& " 0 各组小题均从1起独立编号,忽略编号格式" & vbCrLf & " 1 罗马数字后跟点号或顿号,如:I." & vbCrLf _
& " 2 汉字数字后跟顿号,如:一、" & vbCrLf & vbCrLf & "如输入1或2将对区域内的各小题进行连续编号", , 0)
d = MsgBox("最后一项:如区域内同一大题有两组以上的小题,请确保从第2组起的各组第1小题的编号均为1。" & vbCrLf _
& vbCrLf & "如果符合此项要求,请按确定。按取消退出程序", vbOKCancel)
If d = 2 Then Exit Sub
Application.ScreenUpdating = False
If c = "1" Or c = "2" Then FindNewGroup c
If a = 6 Then BeforeSorting
If b = 6 Then mySorting2
If c = "1" Or c = "2" Then SetSerialNumbers
Selection.SetRange mySortRange.Start, mySortRange.Start
With Selection.Find
.ClearFormatting
.Text = "[A-Za-z]" & ChrW(8217) & "[A-Za-z]"
.MatchWildcards = True
.Replacement.Text = ""
Do While .Execute
.Parent.Range.CharacterWidth = wdWidthHalfWidth
.Parent.SetRange .Parent.End, mySortRange.End
Loop
End With
mySortRange.Select
Application.ScreenUpdating = True
End Sub
[ 本帖最后由 sylun 于 2008-12-30 18:18 编辑 ] |
|