一个把黑线涂黄的VBA小游戏。

设计

这是一个把黑线涂黄的 Excel VBA 小游戏。

在讲到具体技术部分之前,我想先讲一下它的设计来源。

它是源于一个用线把电带去不同地方的视频,视频里有一只手把电线连接起来,光明就出现了。我很喜欢这个视频,觉得它传达了一种很光明的寓意。所以我做的这个小游戏也是通过把原本黑色的线变成黄色,带来光明和美好的东西。

这是我在21年5月的时候做的,但是当时没有写太多关于它的东西。有两个原因,一是不知道大家会不会对它感兴趣(其中涉及到的技术十分简单),另外就是觉得它作为一个小作品展示了太多对内心的探索的过程。偶然间翻到它的视频,就找了半天,找到了原本的文件,决定在这里和大家展示一下它是怎样做出来的。

结果展示

打开Excel,首先出现的是一个提示,让我们把黑色的线涂黄

涂到把小房子连接起来之后,房子的窗户就会自动亮起来,并展示一段话"This will be our house"

继续向下涂,涂到每个灯的下方就会把灯点亮

把三个灯点亮后就会出现一行字:This will be our way home

下一个场景是一只猫

涂到这只猫的时候,猫的眼睛就会亮,出现一行字: This will be our cat: Meou

然后点亮的是戒指的中心

最后点亮的是相依的十字架,这是因为视频长度的原因没有截到的部分。

技术讲解

这里用到了VBA Event事件,就是Excel可以监控你做了什么并根据做的内容做出反应。

双击VBA编辑器下方的Sheet1

在编辑器的最上方位置选到Worksheet和Selection Change

然后会自动出现如下代码,在这段代码中间写的代码会在每次Excel单元格选择的范围变化的时候运行。

这里先不要急着写代码,先命名一下需要引用到的范围。每段线我都会命名为line1, line2 依次向下排列;每个需要自动点亮的位置会命名为Target1, Target2... 依次向下排列;每段话都会命名为love1, love2... 依次向下排列。

然后在代码框里面写

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'如果有错自动运行下一段代码
On Error Resume Next

Dim i As Integer

For i = 1 To 8
'运行change这个宏
Call change("line" & Trim(Str(i)), "target" & Trim(Str(i)), 6, "love" & Trim(Str(i)))

Next i
End Sub

Private Sub change(Stra, Strb, index, Strc)
'如果ColorIndex = 6 代表的是黄色,如果每段线是黄色,那么就改变Strb范围的单元格颜色,和Strc范围的字体颜色
If Range(Stra).Interior.ColorIndex = 6 Then
Range(Strb).Interior.ColorIndex = index
Range(Strc).Font.ColorIndex = -4105
Else
Range(Strb).Interior.ColorIndex = 0
Range(Strc).Font.ColorIndex = 2
End If

End Sub

本文 VBA 源代码点击阅读原文进入精算后花园论坛下载。

交流区

交流请移步至精算后花园论坛 https://actuaryunion.com