ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[分享] 用VBA制作的舒尔特格子

[复制链接]

TA的精华主题

TA的得分主题

发表于 2019-8-12 22:57 | 显示全部楼层 |阅读模式
本帖最后由 zxc1zxc1zxc1 于 2019-8-13 11:48 编辑

在学习VBA的时候,尝试着做一些简单益智的小游戏,也是挺有意思的。
如果各位网友有一些有意思的作品,希望可以分享一下,大家一起欣赏与学习。
--------------------------------------------------------------------------------------------------------
各位,不好意思,之前上传的工作表,删掉了一张表,而代码里工作表是通过索引号引用的,所以导致400报错。
8月13日11:50重新上传。谢谢各位发现问题。
GIF动画演示.gif

舒尔特(自创版).zip

32.36 KB, 下载次数: 136

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2019-8-13 06:12 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
提示错误  400

TA的精华主题

TA的得分主题

发表于 2019-8-13 10:11 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-8-13 11:53 | 显示全部楼层

已重新上传文件,应该可以使用了。

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-8-13 11:54 | 显示全部楼层
sirsunny 发表于 2019-8-13 10:11
玩不了,提示如图:

已修改,重新下载试试,应该好用了。

TA的精华主题

TA的得分主题

发表于 2019-8-13 12:41 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2019-8-13 12:57 | 显示全部楼层
简介
以 7—12 岁年龄组为例,能达到26"以上为优秀,
舒尔特方格
学习成绩应是名列前茅, 42"属于中等水平,班级排名会在中游或偏下, 50"则问题较大,考试会出现不及格现象。
以 12―14 岁年龄组为例,能到达 16 "以上为优良,学习成就应是名列前茅, 26 "属于中等水平,班级排名会在中游或偏下, 36 "则问题较大,测验会呈现不合格现象。
18 岁及以上成年人最好可到达 8 "的程度, 20 "为中等程度。
“舒尔特方格”不但可以简单测量注意力水平,而且是很好的训练方法。又是心理咨询师进行心理治疗时常用的基本方法。
舒尔特表可以通过动态的练习锻炼视神经末梢。心理学上用此表来研究和发展心理感知的速度,其中包括视觉定向搜索运动的速度。

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2019-12-12 10:35 | 显示全部楼层
能否分享代码密码呀,想学习。

TA的精华主题

TA的得分主题

发表于 2019-12-14 21:01 来自手机 | 显示全部楼层
运行一次后,textbox中的数字无法调节,需要重新打开

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-12-26 19:39 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
stone3772 发表于 2019-12-12 10:35
能否分享代码密码呀,想学习。

Option Explicit
Public Y As Variant, t As Single, mycolor1 As Integer, mycolor2 As Integer, mycolor3 As Integer
'mycolor1, mycolor2分别为字体和背景颜色
Public Declare Function PlaySound Lib "winmm.dll" Alias "PlaySoundA" (ByVal lpszName As String, ByVal hModule As Long, ByVal dwFlags As Long) As Long
'调用系统声音


Sub 自动生成舒尔特()
Dim myrow As Integer, myrange As Range, mynumber As Integer, sht As Worksheet
Set sht = Sheets(2)
If OptionButton1.Value = True Then
    mycolor1 = 3 '红字
    mycolor2 = 6 '黄底
Else
    mycolor1 = 2 '黑底
    mycolor2 = 1 '白字
End If
If OptionButton3.Value = True Then
    mycolor3 = mycolor2
Else
    mycolor3 = mycolor1
End If
myrow = TextBox1.Value
Set myrange = Range(sht.Cells(2, 2), sht.Cells(2 + myrow - 1, 2 + myrow - 1))
Cells.Select
Selection.Clear
Selection.Interior.ColorIndex = 16
mynumber = myrow ^ 2
'For i = 2 To myrow + 1
  'For j = 2 To myrow + 1
'kkk:
  'Randomize
  'X = Int(Rnd * mynumber) + 1
  'If Application.CountIf(myrange, X) = 0 Then
  'Cells(i, j) = X
  'Else
  'GoTo kkk
  'End If
  'Next j
'Next i '以上循环简单却效率低下,改成下面的不放回随机抽样算法
Dim myarr() As Integer
ReDim myarr(1 To mynumber)
For i = 1 To mynumber
myarr(i) = i
Next
For j = 1 To mynumber
Randomize
s = Int(Rnd * (mynumber - j)) + 1
w = myarr(s)
myarr(s) = myarr(j)
myarr(j) = w
Next
For p = 2 To myrow + 1
  For q = 2 To myrow + 1
  Cells(p, q) = myarr((p - 2) * myrow + q - 1)
  Next
Next
myrange.Select
With Selection
      .ColumnWidth = 11 * 5 / myrow
      .RowHeight = 70 * 5 / myrow
      .Font.Name = "宋体"
      .Font.Size = 36 * 5 / myrow
      .Font.Bold = True
      .Font.ColorIndex = mycolor1
      .HorizontalAlignment = xlCenter
      .Interior.ColorIndex = mycolor2
End With
Selection.NumberFormatLocal = "G/通用格式"
    With Selection.Borders(xlEdgeLeft)
        .ColorIndex = 36
        .Weight = xlThick
        .LineStyle = xlDouble
    End With
    With Selection.Borders(xlEdgeTop)
        .ColorIndex = 36
        .Weight = xlThick
        .LineStyle = xlDouble
    End With
    With Selection.Borders(xlEdgeBottom)
        .ColorIndex = 36
        .Weight = xlThick
        .LineStyle = xlDouble
    End With
    With Selection.Borders(xlEdgeRight)
        .ColorIndex = 36
        .Weight = xlThick
        .LineStyle = xlDouble
    End With
    With Selection.Borders(xlInsideVertical)
        .ColorIndex = 36
        .Weight = xlThick
        .LineStyle = xlDouble
    End With
    With Selection.Borders(xlInsideHorizontal)
        .ColorIndex = 36
        .Weight = xlThick
        .LineStyle = xlDouble
    End With
Range("A20").Select
Y = 1
TextBox2.Text = 1
t = Timer
End Sub

Private Sub CommandButton1_Click()
Call 自动生成舒尔特
End Sub

Private Sub ComboBox1_Change()

End Sub

Private Sub OptionButton2_Click()

End Sub

Private Sub SpinButton1_SpinUp()
If TextBox1.Text = 9 Then
TextBox1.Text = TextBox1.Text
Else
TextBox1.Text = TextBox1.Text + 1
End If
End Sub

Private Sub SpinButton1_SpinDown()
If TextBox1.Text = 3 Then
TextBox1.Text = TextBox1.Text
Else
TextBox1.Text = TextBox1.Text - 1
End If
End Sub

Private Sub TextBox1_Change()
If Not IsNumeric(TextBox1) Then
TextBox1.Text = 3
mymsg1 = MsgBox("请输入3-9整数,已初始化为3", vbOKOnly, "提醒")
Else
If (TextBox1.Value - 3) * (TextBox1.Value - 4) * (TextBox1.Value - 5) * (TextBox1.Value - 6) * (TextBox1.Value - 7) * (TextBox1.Value - 8) * (TextBox1.Value - 9) <> 0 Then
TextBox1.Text = 3
mymsg1 = MsgBox("请输入3-9整数,已初始化为3", vbOKOnly, "提醒")
End If
End If
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim cc As Integer, mymin As Variant, mystring As String '必须养成给变量定义类型的习惯
On Error Resume Next
If Target.Count = 1 Then '判断目标区域为单元格时,执行后续语句
   If Target.Value = Y Then
        Target.Font.ColorIndex = mycolor3 '如果鼠标单击单元格为当前顺序数字,那么单元格变字体颜色为黑色
   'Call PlaySound("c:\windows\media\ir_end.wav", 0&, &H0)
   Y = Y + 1
   TextBox2.Text = Y
   If Y = TextBox1.Value ^ 2 + 1 Then
   mytime = Round(Timer - t, 2) '当完成所有数字的点击时,停止计时
   cc = TextBox1.Value
   mymin = Round(Application.Min(Sheet4.Range(Chr(cc + 62) & 3 & ":" & Chr(cc + 62) & 65536)), 2)
   If mymin > mytime Then
   mystring = "恭喜你创造了新纪录!"
   Else
   mystring = "继续加油!"
   End If
   mymsg = MsgBox("本次成绩为:" & mytime & "秒" & vbCrLf & "历史记录为:" & mymin & "秒" & vbCrLf & mystring, vbOKOnly, "成绩") '弹出包含计时等信息的对话框
   numb = Sheet4.Range(Chr(cc + 62) & 65536).End(xlUp).Row
   Sheet4.Cells(numb + 1, cc - 2).Value = mytime
   '将测试成绩写到sheet4中
   End If
   End If
End If
End Sub

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-4-27 07:24 , Processed in 0.038331 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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