ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 求助!如何将excel生成规定格式的word文档

[复制链接]

TA的精华主题

TA的得分主题

发表于 2011-8-20 21:23 | 显示全部楼层 |阅读模式
求救各位大虾!
本想做一个试题库,已经把试题整理到EXCEL里面了,但是现在就是想把EXCEL的试题随机抽取并生成word版的试卷。恳请各位大虾帮帮忙。
试题中有单选、多选、判断
1.每种类型的题目都放在一个sheet表中。现在就是想单选抽20题,多选10题,判断20题。应该是先生成到一个新表中吧,我把它命名为“试题抽取”。题库的题库后续会不断录入,看看有没有办法不限制住题目的数量。
2.把抽好的试题生成word格式的文档([]代表某列字段的数据)(具体实例在word文档里面)
[题目内容]
A. [A. ]
B. [B. ]
C. [C. ]
D. [D. ]
答案 [答案]
页码 [页码]
解析 [解析]
如果第一步比较麻烦,就省略掉吧。我到时候用生成随机数的方法手动生成抽取的题目。关键是第二步,如何将抽取的题目生成出符合格式要求的word文档,可能会相当麻烦,所以跪求大侠帮忙!本人感激不尽!

本人在论坛也下了一个随机生成试题的excel文档,但是试题的格式和我的不一样,如果要套用则又是个巨大的工作量!我也一起上传,共大家参考。
试题抽取.zip (24.47 KB, 下载次数: 162)

随机生成试卷.rar (95.71 KB, 下载次数: 174)

TA的精华主题

TA的得分主题

发表于 2011-8-20 22:44 | 显示全部楼层
Option Explicit


Sub CreateWord()

    Dim i As Long
    Dim k As Long
   
    Dim iRow As Long
   
    Dim tmp As String
   
    Dim strRandList() As String
   
    Dim docApp As New Word.Application  '先要引用word库
   
   
    With docApp
   
        '隐藏word文档
        .Visible = False

        '新建一个word文件
        .Documents.Add DocumentType:=wdNewBlankDocument

        '单选
        .Selection.TypeText "一、单选" & vbCrLf
        
        tmp = GetRandList(20, Sheets("单选").Cells(65536, 3).End(xlUp).Row - 1) '题目ID
        
        strRandList = Split(tmp, vbNullChar)
            
        For i = 0 To UBound(strRandList)
        
            iRow = strRandList(i) + 1 '题目ID比其所在行要少1,所以这里加1
        
            .Selection.TypeText CStr(i + 1) & ". " & Sheets("单选").Cells(iRow, 4) & vbCrLf
            
            For k = 1 To 4
            
                .Selection.TypeText Chr(k + 64) & ". " & Sheets("单选").Cells(iRow, k + 4) & vbCrLf
               
            Next
            
            .Selection.TypeText "答案 " & Sheets("单选").Cells(iRow, 9) & vbCrLf
            
            .Selection.TypeText "页码 " & Sheets("单选").Cells(iRow, 10) & vbCrLf
            
            .Selection.TypeText "解析 " & Sheets("单选").Cells(iRow, 11) & vbCrLf & vbCrLf
            
        Next
        
        '多选
        .Selection.TypeText "二、多选" & vbCrLf
        
        tmp = GetRandList(10, Sheets("多选").Cells(65536, 3).End(xlUp).Row - 1) '题目ID
        
        strRandList = Split(tmp, vbNullChar)
            
        For i = 0 To UBound(strRandList)
        
            iRow = strRandList(i) + 1 '题目ID比其所在行要少1,所以这里加1
        
            .Selection.TypeText CStr(i + 1) & ". " & Sheets("多选").Cells(iRow, 4) & vbCrLf
            
            For k = 1 To 4
            
                .Selection.TypeText Chr(k + 64) & ". " & Sheets("多选").Cells(iRow, k + 4) & vbCrLf
               
            Next
            
            .Selection.TypeText "答案 " & Sheets("多选").Cells(iRow, 9) & vbCrLf
            
            .Selection.TypeText "页码 " & Sheets("多选").Cells(iRow, 10) & vbCrLf
            
            .Selection.TypeText "解析 " & Sheets("多选").Cells(iRow, 11) & vbCrLf & vbCrLf
            
        Next

        '判断
        .Selection.TypeText "三、判断" & vbCrLf
        
        tmp = GetRandList(20, Sheets("判断").Cells(65536, 3).End(xlUp).Row - 1) '题目ID
        
        strRandList = Split(tmp, vbNullChar)
            
        For i = 0 To UBound(strRandList)
        
            iRow = strRandList(i) + 1 '题目ID比其所在行要少1,所以这里加1
        
            .Selection.TypeText CStr(i + 1) & ". " & Sheets("判断").Cells(iRow, 4) & vbCrLf
            
            For k = 1 To 2
            
                .Selection.TypeText Chr(k + 64) & ". " & Sheets("判断").Cells(iRow, k + 4) & vbCrLf
               
            Next
            
            .Selection.TypeText "答案 " & Sheets("判断").Cells(iRow, 9) & vbCrLf
            
            .Selection.TypeText "页码 " & Sheets("判断").Cells(iRow, 10) & vbCrLf
            
            .Selection.TypeText "解析 " & Sheets("判断").Cells(iRow, 11) & vbCrLf & vbCrLf
            
        Next

        '保存文件
        .ActiveDocument.SaveAs ThisWorkbook.Path + "\OK.doc"

        .ActiveDocument.Close

        .Quit
        
    End With
   
    Set docApp = Nothing
        
    MsgBox "finish !"
   
End Sub


Private Function GetRandList(ByVal RandCount As Long, ByVal upperbound As Long) As String

    Dim i As Long
   
    Dim tmp As Long
   
    Dim strResult As String
   
   
    strResult = vbNullChar
   
    For i = 1 To RandCount
   
        Randomize
        
        tmp = Int(upperbound * Rnd + 1)
        
        If InStr(strResult, vbNullChar & CStr(tmp) & vbNullChar) > 0 Then
        
            i = i - 1
            
        Else
        
            strResult = strResult & CStr(tmp) & vbNullChar 'Int((upperbound - lowerbound + 1) * Rnd + lowerbound)
            
        End If
   
    Next

    GetRandList = Mid(strResult, 2, Len(strResult) - 2)

End Function

新建文件夹.rar

36.81 KB, 下载次数: 445

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-8-21 17:26 | 显示全部楼层
太感谢了,真是解决了我一个大问题,太谢谢了!

TA的精华主题

TA的得分主题

发表于 2011-8-21 18:26 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
三种试题在excel的格式有很大共通性,
中间部分的代码基本一致,所以可以提一个共同方法
程序能更清晰点,懒得弄了,自己整吧

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-8-22 15:29 | 显示全部楼层
你好,我想在把代码粘贴到其他科目的excel里面,想针对每个科目都设置一个宏,但是运行时出现“用户定义类型未定义” ,“    Dim docApp As New Word.Application  '先要引用word库 ”这一行被标注出来,不知道为什么一直没有成功!

TA的精华主题

TA的得分主题

发表于 2011-9-4 09:36 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
学习,很需要。但具体还不会用。

TA的精华主题

TA的得分主题

发表于 2011-9-4 17:54 | 显示全部楼层
学习了...............................

TA的精华主题

TA的得分主题

发表于 2011-9-4 17:27 | 显示全部楼层
Dim docApp As New Word.Application  
这个要在引用对话框里选择word类库

TA的精华主题

TA的得分主题

发表于 2011-9-4 19:57 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2011-9-4 20:53 | 显示全部楼层
word格式的文档的试题提取到excel中要怎么做呢
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-18 20:45 , Processed in 0.036206 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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