如何用VBA表白系列2:一个把黑线涂黄的游戏
-
设计
在讲到具体技术部分之前,我想先讲一下它的设计来源。
它是源于一个用线把电带去不同地方的视频,视频里有一只手把电线连接起来,光明就出现了。我很喜欢这个视频,觉得它传达了一种很光明的寓意。所以我做的这个小游戏也是通过把原本黑色的线变成黄色,带来光明和美好的东西。
这是我在今年五月的时候做的,但是当时没有写太多关于它的东西。有两个原因,一是不知道大家会不会对它感兴趣(其中涉及到的技术十分简单),另外就是觉得它作为一个小作品展示了太多对内心的探索的过程。偶然间翻到它的视频,就找了半天,找到了原本的文件,决定在这里和大家展示一下它是怎样做出来的。
-
结果展示
打开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... 依次向下排列。然后在代码框里面写
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
-
源文件放到这里了,你们拿去玩吧。
Love - for intro.zip