ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 如何能让表格中的窗体随机出现?

[复制链接]

TA的精华主题

TA的得分主题

发表于 2019-12-2 15:53 | 显示全部楼层 |阅读模式
本帖最后由 hanxing1983 于 2019-12-2 21:31 编辑

各位老师,请教一个问题哈。
我做了一个答题平台,里面总共有25道题,里面的设计思路是答完一道题后按键出现下一道题目,按顺序答题。
但现在希望按一道题时,下一道题是随机出现。例如答完第二道题,按“下一道”,弹出的是3~25题中的随机一道(已答过的自动屏蔽掉),等25道题全部答完,提示“您已完成所有题目”。
我觉得这逻辑有点难,没有头绪,不知道有没老师可以帮忙看看如何解决?

VBA密码是“123”
感谢~~~


备注:
因为这平台是供多人答题,所以我设置的是只读模式(关闭不保存)。不知道能否做到:每个人打开时,答题顺序都是不一样的。

答题 (2).zip (113.43 KB, 下载次数: 2)

代码:重点是后面UserForm3.Show (0)不知道该怎么改才能随机出现,而非固定是3,哈哈Private Sub CommandButton1_Click()
If OptionButton1.Value = True Then
[d2] = OptionButton1.Caption
End If
If OptionButton2.Value = True Then
[d2] = OptionButton2.Caption
End If
If OptionButton3.Value = True Then
[d2] = OptionButton3.Caption
End If
If OptionButton4.Value = True Then
[d2] = OptionButton4.Caption
End If
UserForm2.Hide
UserForm3.Show (0)
End Sub


题目.JPG


答题.zip

112.67 KB, 下载次数: 8

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-12-2 21:41 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
求大神们赐教

TA的精华主题

TA的得分主题

发表于 2019-12-3 08:59 | 显示全部楼层
我给个想法, 搞个function
然后里面申明一个随机变量你的题 随机数 1-25
然后
select case 变量
case 1
    题目1.显示
case 2
    题目2.显示
依次往后加
变量是随机的, 题目也随机出现了.

TA的精华主题

TA的得分主题

发表于 2019-12-3 10:01 | 显示全部楼层
每次产生一组1-25 不重复、随机序列的行号就行了吧。
Sub b()
    Dim i, t, r
    Dim arr(1 To 25, 1 To 1)
    [a:a] = ""
    For i = 1 To 25
        arr(i, 1) = i
    Next
    For i = 1 To 25
        r = Int(Rnd * (25 - i + 1)) + i
        t = arr(r, 1): arr(r, 1) = arr(i, 1): arr(i, 1) = t
    Next
    [a1].Resize(25, 1) = arr
End Sub

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2019-12-3 16:59 | 显示全部楼层
我的思路是把1-25放入字典,循环取一个1-25之间的随机数,判断字典中是否存在,然后用Select case打开各个窗体,然后在字典中删除这个数,确保不会再打开这个窗体。
附件中各个窗体的“下一题"按钮的代码都要修改,也不能有”上一题"了。

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-12-4 10:26 | 显示全部楼层
蓝桥玄霜 发表于 2019-12-3 16:59
我的思路是把1-25放入字典,循环取一个1-25之间的随机数,判断字典中是否存在,然后用Select case打开各个 ...

谢谢老师,不过本人VBA还在自学中,不太会用字典功能,哈哈,还需要努力学习

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-12-4 10:27 | 显示全部楼层
魂断蓝桥 发表于 2019-12-3 10:01
每次产生一组1-25 不重复、随机序列的行号就行了吧。
Sub b()
    Dim i, t, r

厉害,学习了

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-12-4 10:34 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
谢谢大神们的指导,问题已经解决了,我用的是笨方法。
先是每次打开,都会在一列中随机生成1~25的数字,然后指定该区域的单元格的数字对应的同编号的窗体。最后设定从第一个单元格开始,每次“下一题”的按钮,即选择下一个单元格。同时,关闭当前所有窗体,再打开同编号的窗体。
几段主要代码如下(备注,随机数字的代码是从网上找的,哈哈),目前基本可以实现我的目的,不过感觉这方法有点笨,希望以后可以自己写出更简练的代码,譬如有老师所说的用字典功能代码,嘿嘿。

随机生成数字的代码
Sub random()
Application.ScreenUpdating = False
Range("A1:A25").ClearContents
For i = 1 To 25  
kkk:
Randomize
X = Int(Rnd * 24) + 1
If Application.CountIf(Range("AD1:AD24"), X) = 0 Then
Cells(i, 30) = X
Else
GoTo kkk
End If
Next i
End Sub
Best Regard
Roger Chen 1665


Sub biaoge() '点击出现对应的窗体
With ActiveCell
If .Value = 1 Then userform1.Show 0
If .Value = 2 Then UserForm2.Show 0
If .Value = 3 Then UserForm3.Show 0
If .Value = 4 Then UserForm4.Show 0
If .Value = 5 Then UserForm5.Show 0
If .Value = 6 Then UserForm6.Show 0
If .Value = 7 Then UserForm7.Show 0
If .Value = 8 Then UserForm8.Show 0
If .Value = 9 Then UserForm9.Show 0
If .Value = 10 Then UserForm10.Show 0
If .Value = 11 Then UserForm11.Show 0
If .Value = 12 Then UserForm12.Show 0
If .Value = 13 Then UserForm13.Show 0
If .Value = 14 Then UserForm14.Show 0
If .Value = 15 Then UserForm15.Show 0
If .Value = 16 Then UserForm16.Show 0
If .Value = 17 Then UserForm17.Show 0
If .Value = 18 Then UserForm18.Show 0
If .Value = 19 Then UserForm19.Show 0
If .Value = 20 Then UserForm20.Show 0
If .Value = 21 Then UserForm21.Show 0
If .Value = 22 Then UserForm22.Show 0
If .Value = 23 Then UserForm23.Show 0
If .Value = 24 Then UserForm24.Show 0
If .Value = 25 Then UserForm25.Show 0
End With
End Sub

Sub 下一题()
For Each frm In UserForms
frm.Hide
Next
    ActiveCell.Offset(1, 0).Select
    Call biaoge
End Sub
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-3-29 08:02 , Processed in 0.050524 second(s), 11 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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