如何用VBA表白系列2:一个把黑线涂黄的游戏



  • 设计

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

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

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



  • 结果展示

    打开Excel,首先出现的是一个提示,让我们把黑色的线涂黄
    bfea2134-e54a-4034-a2a7-ed5d95708985-image.png
    涂到把小房子连接起来之后,房子的窗户就会自动亮起来,并展示一段话"This will be our house"
    9168409a-5710-4ea7-afb4-67a124f1e00f-image.png
    继续向下涂,涂到每个灯的下方就会把灯点亮
    6e367427-501a-49e2-8fa7-d247c27a1eda-image.png
    把三个灯点亮后就会出现一行字:This will be our way home
    86a7d375-9571-4444-bbdc-c6e2e836dffa-image.png
    下一个场景是一只猫
    8cba130b-0cbf-46d6-91d7-01a305b674b4-image.png
    涂到这只猫的时候,猫的眼睛就会亮,出现一行字: This will be our cat: Meou
    2831b665-cdf1-41f1-af86-632840979634-image.png
    然后点亮的是戒指的中心
    b288bcee-918d-4afa-9b3a-287e839a9681-image.png
    最后点亮的是相依的十字架,这是因为视频长度的原因没有截到的部分。
    693e1b8c-86cc-45ab-9893-8ec2d2fa9bbb-image.png
    1550f1a0-219e-4649-ae5c-e14f0797a597-image.png



  • 技术讲解

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

    双击VBA编辑器下方的[Sheet1]
    d037cc4e-b794-4315-8299-3b0611eacc9c-image.png
    在编辑器的最上方位置选到Worksheet和Selection Change
    b4091867-d45c-4e5a-899c-9f9fe9ad876f-image.png
    然后会自动出现如下代码,在这段代码中间写的代码会在每次Excel单元格选择的范围变化的时候运行。
    122c6a09-834e-465b-9be6-4cb608b3e1ca-image.png
    这里先不要急着写代码,先命名一下需要引用到的范围。每段线我都会命名为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


登录后回复