【Excel VBA基础编程】边玩边学:可视化程序开发

上期我们用While循环和If...Else条件判断的基础语法,合作编写了一款猜数字小游戏。现在我们来给它改个版,这次的重点是:学习用表单控件(比如按钮)让游戏界面更好操作,同时掌握 Range 对象操作单元格

效果展示

与上一期制作方式明显的区别是没有使用While循环语句,而是使用了事件驱动

在Excel工作表中增加了"开始游戏"、"提交猜测"两个表单按钮,并将这两个按钮关联到对应的VBA代码上,实现点击操作

工作表中玩猜数字游戏

通过以上视频可以看到,整个游戏过程都依赖于对工作表单元格的精确读写操作:通过读取玩家输入的猜测数字、游戏反馈结果来让游戏继续下去。同时,还将玩家猜测数字对应的单元格标识出不同的底色,方便区分

所以,改版游戏的过程,实质上是在练习如何用编程者的思维,去自动化你早已熟练掌握的手工操作。掌握了Range对象,就等于拿到了让Excel自动、批量、按规则处理数据的钥匙

代码及说明

参考代码如下:

vbscript 复制代码
Option Explicit

' 声明全局变量
Dim TargetNumber As Integer
Dim Chances As Integer
Dim NextGuessRow As Integer ' 用于获取下一次玩家输入的数字
'"开始游戏"按钮
Sub StartGame()
    ' 清空游戏区域内容
    With ThisWorkbook.Worksheets("Sheet1")
        .Range("B5:C100").ClearContents
        .Range("B5:C100").Interior.ColorIndex = xlNone ' 清除颜色
    End With

    ' 生成1-100的随机目标数字
    Randomize
    TargetNumber = Int((100 - 1 + 1) * Rnd + 1)
    Chances = 0
    NextGuessRow = 5 ' 从B5开始记录猜测数字
    '代码调试使用
    'ThisWorkbook.Worksheets("Sheet1").Range("A1").Value = TargetNumber
    MsgBox "猜数字游戏已开始!从B5开始顺次输入你的猜测数字,范围是[0,100],然后点击'提交猜测'按钮", vbInformation
End Sub

' 关联到"提交猜测"按钮
Sub MakeMove()
    Dim ws As Worksheet
    Dim PlayerGuess As Integer
    Dim FeedbackCell As Range
    Dim GuessCell As Range
    Set ws = ThisWorkbook.Worksheets("Sheet1")
    ' 获取玩家在当前行输入的猜测数字
    PlayerGuess = ws.Cells(NextGuessRow, "B").Value ' B列存放玩家猜测数字
    ' 简单地验证输入:必须是大于等于1,小于等于100的整数
    If Not IsNumeric(PlayerGuess) Then
        MsgBox "请在单元格B" & NextGuessRow & "中输入一个有效的数字!", vbExclamation
        Exit Sub
    End If
    If PlayerGuess < 1 Or PlayerGuess > 100 Then
        MsgBox "请输入一个1到100之间的数字!", vbExclamation
        Exit Sub
    End If
    ' 记录猜测次数
    Chances = Chances + 1
    ' 核心游戏逻辑
    Set GuessCell = ws.Cells(NextGuessRow, "B")
    Set FeedbackCell = ws.Cells(NextGuessRow, "C") ' C列存放反馈文本

    If PlayerGuess > TargetNumber Then
        FeedbackCell.Value = "猜大了!"
        GuessCell.Interior.Color = RGB(255, 150, 140) ' 浅红色背景
    ElseIf PlayerGuess < TargetNumber Then
        FeedbackCell.Value = "猜小了!"
        GuessCell.Interior.Color = RGB(140, 140, 255) ' 浅蓝色背景
    Else
        FeedbackCell.Value = "恭喜,猜对了!"
        GuessCell.Interior.Color = RGB(140, 255, 140) ' 浅绿色背景
        MsgBox "太棒了!你猜对了!是数字 " & TargetNumber & "!" & vbCrLf & _
               "本轮用了 " & Chances & " 次机会。", vbInformation
        Dim Response As VbMsgBoxResult '专门用于接收和判断 MsgBox 函数的返回值
        Response = MsgBox("想再玩一次吗?", vbYesNo + vbQuestion)
        If Response = vbYes Then
            Call StartGame ' 重新开始游戏
        End If
        Exit Sub
    End If

    ' 获取下一个猜测数字对应的行号
    NextGuessRow = NextGuessRow + 1

    If Chances >= 10 Then
        MsgBox "太遗憾了,10次机会用尽。游戏结束!目标数字是 " & TargetNumber & "。", vbExclamation
        Call StartGame ' 自动重新开始
    End If
End Sub

以上代码使用说明:

  • 打开你的.xlsm文件

  • 按下 Alt + F11 快捷键,打开VBA编辑器

  • 在菜单栏选择 "插入" -> "模块",将上述代码粘贴到新模块中

  • 回到Excel中的Sheet1工作表,工作栏中依次选择【开发工具】【插入】【表单控件】,添加两个按钮,命名为"游戏开始"和"提交猜测",并分别关联宏代码StartGame和MakeMove(添加按钮时会有提醒,选中宏代码关联即可)

以上操作步骤完成后,点击"游戏开始"后,我们就可以享受这款自己开发的小游戏了

结束语

你学会了吗?俗话说得好"授人以鱼不如授人以渔",只有自己搞清楚了这些编码规则,掌握了方法,在以后遇到哪片数据需要处理,都能游刃有余地打造出最适合自己的工具。即便是用AI生成代码,也会是效率更高的那位。因为在潜移默化中就已经掌握了与AI沟通的能力与技巧

好了,今天的分享到此结束了,咱们下期继续!

本公众号一直在不间断地分享免费的编程案例和实用技巧。无论您是用来提升自动化办公效率还是想提升自我,请关注我的公众号,解锁更多的编程知识

相关推荐
AI_56787 小时前
Excel数据透视表提速:Power Query预处理百万数据
数据库·excel
颜挺锐10 小时前
EXCEL中A列连接B列中间加| 怎么写公式
excel
J_liaty19 小时前
基于POI实现Excel文件导入导出
excel·poi
Texous20 小时前
Java解析Excel图片
java·excel·wps·office·excel图片处理·excel图片解析·excel图片提取
chatexcel2 天前
从Excel到PPT:如何利用自动化工具重构数据汇报流程
自动化·powerpoint·excel
VBA63372 天前
VBA即用型代码手册:自动调整表格大小适应页面Auto Size Table to fit Page
vba
科技块儿2 天前
如何利用Excel宏和离线数据库自动化IP归属地查询?
服务器·数据库·物联网·tcp/ip·自动化·excel
请为小H留灯3 天前
Excel 常用公式大全(带详细步骤):文本→日期→判断→查找→统计→求和
excel·职场·函数·公式·办公常用
温轻舟3 天前
Python-文字>语音转换器
开发语言·人工智能·python·语音识别·自动化工具·温轻舟