注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

零售创新,创新那些事儿,SPSS,VBA

零售创新

 
 
 

日志

 
 
关于我

新浪微博,零售创新 研究经理,数据分析师 希望和市场研究和零售业的同事共同进步! 本博客发表的都是免费或试用的资料,如果有版权问题请发邮件wangli12a@163.com联系删除。 spss excel vba blog

网易考拉推荐

Word 随机出题 vba  

2010-09-14 18:08:02|  分类: VB和VBA知识 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
 
Sub test()
'假设题号编号格式均与附件相同。注:题库中每题之间须有一空行相隔,且每题的内容中不能有空行。
Dim a As String, c As Integer
Dim n As Integer, temp As Integer, TF As Boolean, Num() As Integer, i As Integer, j As Integer
Dim myInfo As String, myDoc As Document, Doc As Document, myRange As Range, tempRange As Range
a = InputBox("请输入需提取的总题数", , "30")
Application.ScreenUpdating = False
Set myDoc = ActiveDocument
With myDoc.Content.Find
    .ClearFormatting
    .Text = "^13[((][ABCD]@[))][0-9]@、"
    .MatchWildcards = True
    Do While .Execute '统计题库文档(活动文档)的总题数
        c = c + 1
        .Parent.SetRange .Parent.End, ActiveDocument.Content.End
    Loop
    If CInt(a) > c Or CInt(a) <= 0 Then Exit Sub '输入数据不在总题数范围内则退出程序
    Randomize
    Do While n < CInt(a) '随机选取不重复题号
        ReDim Preserve Num(n)
        temp = Int((c * Rnd) + 1)
        If n > 0 Then
            For i = 0 To UBound(Num)
                If Num(i) = temp Then
                    TF = True
                    Exit For
                End If
            Next
        End If
        If TF = False Then
            Num(n) = temp
            n = n + 1
        End If
        TF = False
    Loop
    For i = 0 To CInt(a) - 2 '排序
        For j = i + 1 To CInt(a) - 1
            If Num(i) > Num(j) Then
                temp = Num(i)
                Num(i) = Num(j)
                Num(j) = temp
            End If
        Next
    Next
    myInfo = "提取记录" & vbCrLf & "题号" & vbTab & "题库题号" & vbCrLf
    For i = 0 To CInt(a) - 1 '取得试题题号与题库题号的对应数据
        myInfo = myInfo & i + 1 & vbTab & Num(i) & Chr(13)
    Next
    Set Doc = Documents.Add
    For i = 0 To CInt(a) - 1 '以新文档按顺序输出提取结果
        .Parent.WholeStory
        .Text = "^13[((][ABCD]@[))]" & Num(i) & "、"
        If .Execute Then
            Set myRange = .Parent
            With myRange
                .Select
                Selection.Collapse wdCollapseStart
                If Selection.Find.Execute("^13^13") Then
                    .SetRange .Start + 1, Selection.End
                Else
                    .SetRange .Start + 1, myDoc.Content.End
                End If
            End With
            Set tempRange = Doc.Bookmarks("\EndofDoc").Range
            tempRange.FormattedText = myRange.FormattedText
            tempRange.Find.Execute "([((][ABCD]@[))])" & Num(i) & "(、)", _
                MatchWildcards:=True, replacewith:="\1" & i + 1 & "\2", Replace:=wdReplaceOne
        End If
    Next
End With
Doc.Content.InsertAfter vbCrLf & myInfo '在新文档结尾插入对照记录
Doc.Activate
Application.ScreenUpdating = True
MsgBox "提取结果及题号对照记录见新文档。"
End Sub
  评论这张
 
阅读(1018)| 评论(2)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017