VBA模拟题库生成器

VBA模拟题库生成器

Option ExplicitDim intXZ As Integer    '选择题数
Dim intPD As Integer    '判断题数
Dim intTK As Integer    '填空题数
Dim intWD As Integer    '问答题数
Dim intNon As Integer    '未知题数
Dim intCount As Integer '题库行数
Dim intCol As Integer     '岗位项所在列号
Dim intSelrow As Long  '随机选择的行
Dim intYX() As Long    '已选过的行
Dim intTMS As Integer '试卷题目数Private Function GetROW() As Integer '不重复的随机行Dim a As LongDim j As LongRandomizeReSel:a = Int(Rnd * intCount + 1)For j = 1 To intTMS - 1If intYX(j) = a Then GoTo ReSel'Exit ForNext jGetROW = aEnd FunctionPrivate Sub CountTM(strGW As String)
'计算题目数Dim i As IntegerintCol = Application.WorksheetFunction.Match(strGW, Sheet1.Range("A3:X3"), 0)Me.Caption = "正在计算各类题数..."intXZ = 0
intPD = 0
intTK = 0
intWD = 0
intNon = 0On Error Resume Next
With Sheet1For i = 4 To intCountIf UCase(.Cells(i, intCol)) = "Y" Then   '是所要的Select Case .Cells(i, 3)Case "选择"intXZ = intXZ + 1Case "判断"intPD = intPD + 1Case "填空"intTK = intTK + 1Case "问答"intWD = intWD + 1Case ElseintNon = intNon + 1End SelectEnd IfNext
End With
Me.Caption = "试卷生成器(Rev#20060401)"End SubPrivate Sub cmdCancel_Click()frmPaper.HideUnload frmPaper
End SubPrivate Sub cmdOK_Click()'检测是否选择岗位If comPst.ListIndex = -1 Then MsgBox "请选择岗位...", vbCritical, "参数不全": Exit SubCall CountTM(comPst.Value) '计算题目数If CInt(txt11) > intXZ Or CInt(txt21) > intPD Or CInt(txt31) > intTK Or CInt(txt41) > intWD ThenMsgBox "你输入的题数不能大于题库总数:" & vbCrLf & vbCrLf _& "选择题有: " & intXZ & " 题" & vbCrLf _& "判断题有: " & intPD & " 题" & vbCrLf _& "填空题有: " & intTK & " 题" & vbCrLf _& "问答题有: " & intWD & " 题" & vbCrLf _& "未知题型: " & intNon & " 题", vbInformation + vbOKOnly, "题源不足"Exit SubEnd IfintTMS = CInt(txt11) + CInt(txt21) + CInt(txt31) + CInt(txt41)ReDim intYX(intTMS)Application.ScreenUpdating = FalseMe.Caption = "试卷生成器 >>正在检测数据,请稍后...."Sheet2.Unprotect "2007"Dim strTitle As StringDim intDot As Integer'填写表头,识别中英文intDot = InStr(1, txtTitle, ",", vbTextCompare)If intDot <= 0 ThenstrTitle = txtTitleElsestrTitle = Mid(txtTitle, 1, intDot - 1) & Chr(10) & Mid(txtTitle, intDot + 1, Len(txtTitle))End If'初始化表格With Sheet2.Range("B6:B5004").EntireRow.Delete.Range("A2") = strTitleWith Range("A2").Characters(Start:=1, Length:=intDot).Font.Size = 18.Characters(Start:=intDot + 1, Length:=Len(strTitle) - intDot).Font.Size = 10End With.Range("I2") = "PaperID: " & Format(Now(), "yymmdd-hhmm").Range("C4") = comPst.Value.Range("I4") = "考时: " & txtHour & "分钟" & Chr(10) & "Exam time limit " & txtHour & " minutes"With Range("i4")intDot = InStr(1, .Value, "分", vbTextCompare).Characters(Start:=1, Length:=intDot).Font.Size = 10.Characters(Start:=intDot + 1, Length:=Len(.Value) - intDot).Font.Size = 8End WithstrTitle = "": intDot = 0  '变量复位End WithMe.Caption = "试卷生成器 >>正在计算题库,请稍后...."'选择并填充题目Dim XZ As IntegerDim XZ2 As IntegerDim PD As IntegerDim PD2 As IntegerDim TK As IntegerDim TK2 As IntegerDim WD As IntegerDim WD2 As IntegerDim m As Integer, n As Integer '循环题数标题变量Dim strGW As String   '岗位Dim strTL As String   '题类Dim strTM As String   '题目Dim strXX As String   '选项Dim ok As Long '有效题行号'依次完成选择 , 判断, 填空, 简述题n = 1For m = 1 To 4Select Case mCase 1XZ = 6 + nCase 2PD = 6 + nCase 3TK = 6 + nCase 4WD = 6 + nEnd SelectIf Me("txt" & m & "1") > 0 ThenWith Sheet2.Cells(5 + n, 2)MergeRow CInt(5 + n)n = n + 1 + IIf(m = 1, txt11.Value * 2, Me("txt" & m & "1").Value).Value = Me("lbl" & m).Caption & "  " & Me("txt" & m & "3") & "   共 " & Me("txt" & m & "1") & " 题, 每题 " & Me("txt" & m & "2") & " 分".RowHeight = 32.25.Font.Size = 14.Interior.Color = vbYellowEnd WithEnd IfNextMe.Caption = "试卷生成器 >>正在随机选题,请稍后...."'随机选择题目XZ2 = CInt(txt11 * 2 + XZ)PD2 = CInt(txt21 + PD)TK2 = CInt(txt31 + TK)WD2 = CInt(txt41 + WD)ok = 0'只能在同一时间选择好:题类,题目,岗位Do Until XZ >= XZ2 And PD >= PD2 And TK >= TK2 And WD >= WD2DoEvents'获得不重复的随机行号intSelrow = GetROWWith Sheet1strGW = UCase(CStr(.Cells(intSelrow, intCol)))strTL = CStr(.Cells(intSelrow, 3))strTM = CStr(.Cells(intSelrow, 5))strXX = CStr(.Cells(intSelrow, 6))End WithWith Sheet2If strGW = "Y" ThenintYX(ok) = intSelrowSelect Case strTLCase "选择"If XZ2 = 0 Or XZ >= XZ2 ThenElse.Cells(XZ, 2).Value = strTMMergeRow XZ.Cells(XZ + 1, 2).Value = strXXMergeRow XZ + 1If .Cells(XZ - 2, 1) = "" Then .Cells(XZ, 1) = 1 Else .Cells(XZ, 1) = .Cells(XZ - 2, 1) + 1XZ = XZ + 2ok = ok + 1End IfCase "判断"If PD2 = 0 Or PD >= PD2 ThenElse.Cells(PD, 2).Value = strTMMergeRow PDIf .Cells(PD - 1, 1) = "" Then .Cells(PD, 1) = 1 Else .Cells(PD, 1) = .Cells(PD - 1, 1) + 1PD = PD + 1ok = ok + 1End IfCase "填空"If TK2 = 0 Or TK >= TK2 ThenElse.Cells(TK, 2).Value = strTMMergeRow TKIf .Cells(TK - 1, 1) = "" Then .Cells(TK, 1) = 1 Else .Cells(TK, 1) = .Cells(TK - 1, 1) + 1TK = TK + 1ok = ok + 1End IfCase "问答"If WD2 = 0 Or WD >= WD2 ThenElse.Cells(WD, 2).Value = strTMMergeRow WDIf .Cells(WD - 1, 1) = "" Then .Cells(WD, 1) = 1 Else .Cells(WD, 1) = .Cells(WD - 1, 1) + 1WD = WD + 1ok = ok + 1End IfEnd SelectEnd IfEnd WithMe.Caption = "试卷生成器 >>正在随机选题....(" & Int(ok / intTMS * 100) & "% OK)"LoopMe.Caption = "试卷生成器 >>正在优化格式,请稍后...."Sheet2.SelectSheet2.Columns(1).AutoFitSheet2.Columns(1).HorizontalAlignment = xlLeftRange("A2").CurrentRegion.SelectFor m = 7 To 10 Step 1With Selection.Borders(m).LineStyle = xlContinuous.Weight = xlMedium.ColorIndex = xlAutomaticEnd WithNextRange("c4").SelectActiveWindow.DisplayGridlines = FalseSheet2.Protect "2007"Application.ScreenUpdating = TrueCall cmdCancel_ClickEnd Sub
Private Sub MergeRow(intSelrow As Integer)With Sheet2.Range(Cells(intSelrow, 2), Cells(intSelrow, 9)).MergeCells = True.HorizontalAlignment = xlLeft.VerticalAlignment = xlCenter.WrapText = True.EntireRow.AutoFitEnd With
End Sub
Private Sub UserForm_Initialize()'初始化岗位Dim rngPostion As Range, i As IntegertxtTitle = Sheet1.Range("a1")For Each rngPostion In Sheet1.Range("$G$3:$X$3")If rngPostion <> "" ThencomPst.AddItem rngPostion.Value, ii = i + 1End IfNextintCount = Application.WorksheetFunction.CountA(Sheet1.Range("E4:E5004")) + 3  '已输入的有效行数End Sub

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/848505.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Nacos源码分析02-服务配置】

文章目录 服务配置Nacos Config入门Nacos服务端配置发布源码Nacos 服务端监控源码 服务配置 服务配置中心介绍 首先我们来看一下,微服务架构下关于配置文件的一些问题&#xff1a; 配置文件相对分散。在一个微服务架构下&#xff0c;配置文件会随着微服务的增多变的越来越多&…

8.22 PowerBI系列之DAX函数专题-盈亏平衡分析

需求 实现 一、用参数设置固定成本&#xff0c;单位变动成本&#xff0c;与毛利率 1 单位变动成本 generateseries(0,100,1) 2 固定成本 generateseries(0,50000,1) 3 毛利率 generateseries(0,0.4,0.01) 二、度量值 1 总变动成本 [单位变动成本 值]*[销量 值] 2 总成本…

各类电机数学模型相关公式总结 —— 集成芯片驱动

0、背景技术概述 永磁直流电机&#xff08;PMDC&#xff09;、永磁同步电机&#xff08;PMSM&#xff09;、无刷直流电机&#xff08;BLDC&#xff09;以及混合式两相步进电机在小功率应用场景中多采用集成芯片驱动&#xff08;如二合一、三合一驱动芯片&#xff09;的原因主要…

深度学习之非极大值抑制NMS介绍

1. 基本介绍 非极大值抑制&#xff08;Non-Maximum Suppression&#xff0c;NMS&#xff09;是深度学习中一种常用的目标检测算法&#xff0c;用于在检测结果中去除冗余的边界框。 在目标检测任务中&#xff0c;通常会使用候选框&#xff08;bounding boxes&#xff09;来表示可…

王道408数据结构CH2_线性表

概述 2 线性表 2.1 基本操作 2.2 顺序表示 线性表的元素从1开始&#xff0c;数组元素下标从0开始 2.2.1 结构体定义 #define Maxsize 50typedef struct{ElemType data[Maxsize];int length; }SqList;#define Initsize 100typedef struct{ElemType *data;int Maxsize ,length;…

Ansible部署 之 zookeeper集群

简介 Ansible是近年来越来越火的一款轻量级运维自动化工具&#xff0c;主要功能为帮助运维实现运维工作的自动化、降低手动操作的失误、提升运维工作效率。常用于自动化部署软件、自动化配置、自动化管理&#xff0c;支持playbook编排。配置简单&#xff0c;无需安装客户端&am…

Github 2024-06-06 Go开源项目日报 Top10

根据Github Trendings的统计,今日(2024-06-06统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Go项目10Ollama: 本地大型语言模型设置与运行 创建周期:248 天开发语言:Go协议类型:MIT LicenseStar数量:42421 个Fork数量:2724 次关注人…

js中的事件循环机制(宏任务和微任务)

JavaScript的事件循环机制是其非阻塞I/O模型的核心&#xff0c;它使得JavaScript能够在单线程环境中高效地处理异步操作。事件循环机制主要由以下几个部分组成&#xff1a; 调用栈&#xff08;Call Stack&#xff09;&#xff1a; 这是JavaScript执行同步代码的地方&#xff0c…

Android状态栏适配问题

Android状态栏适配是一个老生常谈的问题&#xff0c;那么我又拿出来讲了&#xff0c;因为这个东西确实太重要了&#xff0c;基本上每个项目都用得到。状态栏总共有几种形态。第一&#xff0c;让状态栏颜色跟应用主色调一致&#xff0c;布局内容不占有状态栏的位置。第二&#x…

c++学习笔记“类和对象”;友元函数

目录 4.4 友元 4.4.1 全局函数做友元 4.4.1 类做友元 4.4.1 成员函数做友元 4.4 友元 生活中你的家有客厅(Public)&#xff0c;有你的卧室(Private) 客厅所有来的客人都可以进去&#xff0c;但是你的卧室是私有的&#xff0c;也就是说只有你能进去但是呢&#xff0c;你也可…

PSOPT在Ubuntu22.04下的安装

求解器pospt的原链接如下&#xff1a; PSOPT/psopt: PSOPT Optimal Control Software (github.com) 在该文件夹下提供了安装的指导文件&#xff0c;文件内容如下&#xff1a; 在 Ubuntu 22.04 中&#xff0c;如果按照适用于 Ubuntu 20.04 的说明执行 PSOPT 代码&#xff0c;目…

详细分析Mysql中的SQL_MODE基本知识(附Demo讲解)

目录 前言1. 基本知识2. Demo讲解2.1 ONLY_FULL_GROUP_BY2.2 STRICT_TRANS_TABLES2.3 NO_ZERO_IN_DATE2.4 NO_ENGINE_SUBSTITUTION2.5 ANSI_QUOTES 前言 了解Mysql内部的机制有助于辅助开发以及形成整体的架构思维 对于基本的命令行以及优化推荐阅读&#xff1a; 数据库中增…

完美解决 mysql 报错ERROR 1524 (HY000): Plugin ‘mysql_native_password‘ is not loaded

文章目录 错误描述错误原因解决步骤 跟着我下面的步骤走&#xff0c;解决你的问题&#xff0c;如果解决不了 私信我来给你解决 错误描述 执行ALTER USER root% IDENTIFIED WITH mysql_native_password BY 123456;报错ERROR 1524 (HY000): Plugin mysql_native_password is not …

596. 超过5名学生的课

596. 超过5名学生的课 题目链接&#xff1a;596. 超过5名学生的课 代码如下&#xff1a; # Write your MySQL query statement below selectclass from (select class,count(student) as num from Courses group by class) as t where num > 5

AI炒股:获取个股的历史成交价格并画出K线图

任务&#xff1a;获取贵州茅台的近几个月的价格数据&#xff0c;绘制k线图&#xff1b; 在deepseek中输入提示词&#xff1a; 你是一个Python编程专家&#xff0c;要完成一个编写Python脚本的任务&#xff0c;具体步骤如下&#xff1a; 用AKShare库获取股票贵州茅台&#xf…

PID算法在电机速度控制上的应用

目录 概述 1 系统硬件框架 1.1 框架介绍 1.2 硬件实物图 2 STM32Cub生成工程 2.1 软件版本信息 2.2 配置参数 ​编辑2.3 生成项目 3 PID算法实现 3.1 概念 3.2 代码实现 4 其他功能实现 4.1 设置电机速度 4.2 PID算法控制电机 4.3 功能函数的调用 5 测试 5.1 …

Python怎么给图片加水印

在Python中&#xff0c;可以使用PIL&#xff08;Python Imaging Library&#xff09;库或者其更活跃的分支Pillow来给图片添加水印。下面是一个简单的示例&#xff0c;展示如何使用Pillow给图片添加文本水印&#xff1a; from PIL import Image, ImageDraw, ImageFont# 打开原…

3072. 将元素分配到两个数组中 II Rust 线段树 + 离散化

题目 给你一个下标从 1 开始、长度为 n 的整数数组 nums 。 现定义函数 greaterCount &#xff0c;使得 greaterCount(arr, val) 返回数组 arr 中 严格大于 val 的元素数量。 你需要使用 n 次操作&#xff0c;将 nums 的所有元素分配到两个数组 arr1 和 arr2 中。在第一次操…

winscp无法上传,删除,修改文件并提示权限不够的分析

使用winscp删除文件,报了个错如下 根据这个错就去百度,网上大部分都是通过下面这种方法解决: 在winscp端进行设置 输入主机名(即IP地址)、用户名和密码,然后点击高级 在箭头所指位置输入sudo + sftp应用程序的路径 先查询 sudo find / -name sftp-server -print点击Sh…

如何让 AI 自动阅读文档样例,编写符合你需求的代码?

&#xff08;注&#xff1a;本文为小报童精选文章。已订阅小报童或加入知识星球「玉树芝兰」用户请勿重复付费&#xff09; 痛点 我本科读的计算机专业。当时编程&#xff0c;讲究的就是个扎实。例如哈夫曼编码用来压缩解压文件&#xff0c;那真的是自己一行行代码写过来的。更…