VBA帮你玩接龙

2020-12-23 04:53韩有锋
西部论丛 2020年15期
关键词:词库流程图接龙

摘 要:成语接龙是中华民族传统的文字游戏。“有趣”的成语接龙,就是从“有”这个字做“龙头”,一直接到“趣”这个字结尾。在这个过程中,我们综合运用了搜索引擎的使用、办公软件的技巧、流程图的绘制、软件的安装与激活、Excel函数及VBA编程等诸多知识点。由此可见,在学习中探索也是一件很有趣的事。

关键词:成语接龙;Excel函数及VBA

成语接龙是中华民族传统的文字游戏。它有着悠久的历史,也有广泛的社会基础,是老少皆宜的民间文化娱乐活动!

“有趣”的成语接龙,就是从“有”这个字做龙头,一直接到“趣”这个字结尾。例如:有始有终→终有一别→别有风趣。让我们一起来看看这个用Excel是如何实现的呢。

第一步,找成语词库。这个要考验大家的搜索能力了。几经周折,在百度网盘里找到一个3万条成语的词库,https://pan.baidu.com/s/1xcOCQ。厉害,所有的成语还都带有拼音和解释,感谢匿名用户的分享,向您的辛勤付出致敬。

第二步,把找到的词库做成我们想要的样子。只要四字成语,拼音和解释都不要。这里要用到Excel的“分列”和“快速给行添加序号”两个小技巧。对于办公软件应用老手应该说是小菜一碟,在此向新手们小秀一把。

打开下载来的词库文件(txt格式),“Ctrl+A”,全选,“Ctrl+C”,复制。打开Excel,“Ctrl+V”,粘贴,“Ctrl+S”,保存词库文件(选择xlsm格式,因为后面要用到VBA)。关闭txt词库文件。

选中A列的所有内容,然后在工具栏依次点击“数据”-“分列”,接着会弹出分列向导对话框,选中固定宽度后,点击下一步。调整那根黑色箭头到合适位置(其实excel会智能为你选择默认位置,此例就不需要再调整了),点击完成。分列后的A列中就是我们要的四字成语,其他各列的内容可以直接删掉了。

因为下载的词库文件中有“隔一行空一行”的特点,所以A列也是一行成语一行空行。删除多余的空行,要用到给行添加序号的方法。如何快速去除空行,为成语行添加序号,老朽再献一招。

鼠标选任何一个有成语的单元格,同时按“Ctrl+End”键,会自动跳到该工作表的表尾,即该工作表有操作过的最右侧最下方的单元格。记下最下方行的行号,如最后一行是61614,在公式编辑栏的左边显示单元格地址的地方(学名:名称框)内输入B1:B61614,敲回车,这时从B1到B61614所有的单元格都被选中了,我们随便输入一个数字,比如1,同时按“Ctrl+Enter”键,选中的单元格将全部填入刚才输入的内容。在B2单元格内输入2,连续选中“B1:B2”,双击“黑十字”,B列就自动填充了序号。选中A1单元格,在菜单栏上点击图标“A→Z”,所有的成语就排在了一起,按“Ctrl+↓”(方向键的向下箭头),到达A列的最后一行,按“→”键,将光标向右平移到B列,按“↓”键,将光标向下移动一格,按“Ctrl+Shift+↓”,即可选定B列中多余数据的所有行,按Delete键删除。我们再把AB两列互换位置,序号在左,成语在右。A列与B列互换也是有小技巧的哟!首先选中A列数据区,然后按住Shift+鼠标左键往右拖拽,当鼠标变成“十字型方向键”,拖动到B列之后,松开鼠标左键就完成了两列对调互换。用函数left、right提取成语的“头”,“尾”。组合“頭尾”,删除“等效”成语,比如:“深谋远虑”与“深思熟虑”在接龙过程中起的作用是一样的,保留一个就可以。增加标题行,词库大功告成。

第三步,制作程序流程图。流程图的绘制基本上按照编程思路来绘制的,就是用图形方式反映处理过程的“流水账”。绘制出这本“流水账”对于过程中理顺和优化代码是很有帮助的。在程序设计中,最重要的不是写程序代码,而是设计。画图的过程就是思考的过程,由于其直观性,画图的过程本身又促进了思考。

绘制流程图的方法很多,老朽采用的是微软的Visio 2013。安装后,启动KMSpico,点击大的红色按钮,稍等一会,即告成功。如果在安装过程中提示未安装 .net framework4.0,请按提示进行安装。.net framework4.0是XML Web Services 的内部 Windows 组件,很多基于此架构的程序需要它的支持才能够运行。

第四步,着手写代码。本例使用Excel工作表作为数据库,VBA编写代码。VBA是一种编程语言,它依托于Microsoft Office软件,不能独立运行,通过VBA可以实现各种Office软件操作的自动化。VBA的主要作用有:(1)实现Excel中没有提供的功能;(2)提高程序运行速度;(3)按要求自定义函数;(4)对大量需要重复的过程可以实现自动化功能;(5)通过插入窗体做小型管理软件。VBA存放于VB编辑器中。打开方法为:单击EXCEL右上角的OFFICE图标,找到EXCEL选项,单击打开;勾选在功能区显示“开发工具”选项卡,单击确定按钮完成修改;单击菜单栏的开发工具,然后找到Visual Basic选项,单击打开便可以进行相关的VBA编程。也可以按组合键“Alt+F11”进入VB编辑器。再或者是鼠标放置到工作表表名标签上,单击鼠标右键,选择“查看代码”,同样能进入VB编辑器。

编码过程中使用了子过程,变量就要在不同过程中进行传递,这要用到全局变量,VBA要求在程序开始前,先声明全局变量。

老朽在这里用到了中国传统文化中的“家谱”的概念。即龙子、龙孙按“代”记录其名字dm(d)和父亲的名字df(d) ,“代”用变量d记录,并写进数据库。

为防止进入诸如“有求必应→应有尽有→有求必应→应有尽有”这样的死循环,在数据库中增加了一列辅助数据Cells(i, 5) = d。如果一条成语被使用,则在辅助列里写入d的值,只有辅助列内Cells(i, 5) = ""值为空时,成语才能被使用,这就限定一个成语只能被使用一次,从而避免了进入死循环的可能。

判断龙孙中是否有叫“趣”,即是否包括目标结束字。有则退出循环,为zl赋值。

找到“真龙”前,以“龙子”的尾为“龙孙”的头,不断进行循环调用zp

当找到符合条件的“真龙”,调用px子过程:

If zd = 1 Then

Call px

px主要作用是将数据库中已使用到的成语集中在一起,减少遍历循环过程读取数据的次数,提高运行效率。

调用px过程结束后,提取当前行的行号,减少循环次数。t

在L2单元格内输出“真龙”,用并弹出对话框的方式加以提示。

至此,成语接龙的代码就写完了。让我们一起来验证一下它的效果吧:老朽名曰韩有锋,看看能否实现“由韩到有,由有到锋”的成语接龙呢?

输入首尾字:韩有,运行VBA程序,得到结果:韩信将兵→兵不由将→将门虎子→子虚乌有。输入首尾字:有锋,得到结果:有脚阳春→春暖花开→开路先锋。最终“韩有锋”的接龙效果为:【韩】信将兵→兵不由将→将门虎子→子虚乌有→【有】脚阳春→春暖花开→开路先【锋】。

是不是一个很有趣的成语接龙。在这个过程中,我们综合运用了搜索引擎的使用、办公软件的技巧、流程图的绘制、软件的安装与激活、Excel函数及VBA编程等诸多知识点,由此可见,在学习中探索也是一件很有趣的事。

作者简介:韩有锋(1975- ),男,江苏沛县人,大学本科,江苏省徐州技师学院信息工程学院,高级讲师,主要从事设计类、计算机类教学研究工作。

猜你喜欢
词库流程图接龙
云的识别指南
一“吃”多用
输入法词库乾坤大挪移
词语接龙
词语接龙
初探《计算机专业英语》教学
成语接龙
流程图学习指南
将用户词库快速导入搜狗五笔词库