分享

WORD中VBA自动出卷

 shuaixinerwei 2012-02-24

WORD中VBA自动出卷

3.2.3 在数据库中提取试题
当题目个数(TextBoxxts.Text)输入并确定后,按总题数将数据库(试题库)均匀划段并用循环语句依次从划分的试题段中随机提取一道试题。注意试题库题数应大大多于提取题数,本方案为试题库题数大于或等于两倍的提取题数,否则将可能出现重复提取。WORD提供在当前段落之后插入新段落和在文档结尾处插入内容的两种方便的方法,即方法InsertAfter.及InsertParagraphAfter方法。以下语句为根据提取的试题个数(TextBoxxts.Text)将表分段后再确定要提取的试题号(即记录号x),提取记录号为x的试题用.InsertAfter方法插入在WORD文档结尾处,用InsertParagraphAfter方法进行换行:
.MoveFirst  '(接上一段代码
xy = 0
j = 1
For j = 1 To Val(TextBoxxts.Text)
Randomize Timer
x = Int((j - 1) * row / Val(TextBoxxts.Text)) + Int(Rnd(1) * Int(row / Val(TextBoxxts.Text))+1)
y = 1
Do While Not .EOF
If y = x Then
ActiveDocument.Range.InsertAfter j & " " & setpxp.Fields(1)
ActiveDocument.Range.InsertParagraphAfter  '(在此后插入一段代码,编排答案,编排方法与题型有关。)
End If
.MoveNext
y = y + 1
Loop
.MoveFirst
Next j
If .EOF Then
.Close
Set setpxp.ActiveCommand = Nothing  '释放内存
End If
End With
cnnpxp.Close  '关闭连接
End Sub
3.3 自动编排
3.3.1 题头的自动编排
每大题都有题头,其字体、字号及内容(如每小题多少分,共多少题及共多少分等)的自动编排可由以下语句自动完成(With  Wnd With代码中为各小题设置字体、字号及颜色):
i = ActiveDocument.Paragraphs.Count  '(此段代码放在连接ACCESS试题库之后)
ActiveDocument.Range.InsertParagraphAfter
ActiveDocument.Paragraphs(i + 1).Range.Font.Name = "黑体"
ActiveDocument.Paragraphs(i + 1).Range.Font.Size = 10
ActiveDocument.Paragraphs(i + 1).Range.Text = "一、填空题(每小题" & TextBoxdtf.Text / TextBoxxts.Text & "分,共" & TextBoxdtf.Text & "分)"
ActiveDocument.Range.InsertParagraphAfter
With ActiveDocument.Paragraphs(i + 2).Range.Font
.Name = "华文仿宋"
.Color = RGB(0, 0, 0)
End With
3.3.2 根据答案长短确定答案的编排方式
以填空题为例,每题有A、B、C、D四个答案供选择填入,答案有长有短,根据其长短来确定其是否编排在一行或多行中。以下代码为根据答案长短确定答案的编排方式(此段代码插入在提取试题代码之后):
If .Fields(2).ActualSize <= 25 And .Fields(3).ActualSize <= 25 And .Fields(4).ActualSize <= 25 And .Fields(5).ActualSize <= 25  Then  '以下为符合条件按一行编排答案
st = ""
i = 1
For i = 2 To 5
st = st & "(" & Chr(63 + i) & ")" & " " & setpxp.Fields(i) & "     "
Next i
ActiveDocument.Range.InsertAfter st
ActiveDocument.Range.InsertParagraphAfter
Else  '以下为不符合条件按四行编排答案
st = ""
For i = 2 To 5
st = "(" & Chr(63 + i) & ")  " & setpxp.Fields(i)
ActiveDocument.Range.InsertAfter st
ActiveDocument.Range.InsertParagraphAfter
Next i
End If
由于题型的不同,自动编排代码段将有所变化。比如问答题、综合题等要求在提取试题后留出一定的答题空间,这一问题用语句ActiveDocument.Range.InsertParagraphAfter(效果为插入一个空行)即可解决

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多