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(效果为插入一个空行)即可解决