ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 2521|回复: 0

【求助】英语单词听写程序朗读一遍修改为朗读二遍

[复制链接]

TA的精华主题

TA的得分主题

发表于 2016-4-20 12:09 | 显示全部楼层 |阅读模式
从电脑爱好者网站(cfan.com.cn)看到一篇《用Excel设计英语单词听写程序》文章,因本人每天要给家里的小孩默写单词,感觉很实用。但用该程序只顺序朗读一遍,求哪位大神能修改一下,使其每个单元格朗读二遍,再跳到下一个单词。

原文件具体内容如下:

Excel是一个统计软件,很难想像Excel与英语单词听写会建立关联,但Excel 2016的“朗读单元格”功能足以使人们改变这种想法,利用简易的Excel VBA可以设计出朗读效果良好的英语单词听写程序。


1. “朗读单元格”按钮设计


“朗读单元格”不是“常用命令”,默认情况下在功能区中找不到这个命令。但可以通过“自定义功能区”设置,让这个命令显示在功能区工具栏上。


选择“文件→选项”菜单,进入“选项”设置对话框,点击“自定义功能区”,在右边的“主选项卡”中单击选择“开始”选项卡,再点击下面的“新建组(N)”按钮新建一个自定义组。具体方法如下。


在“从下列位置选择命令(C)”中选择“不在功能区中的命令”,找到“朗读单元格”命令,用鼠标单击选择这个命令,确认上一个步骤在“开始”选项卡新建的“新建组(自定义)”处于选择状态,点击“添加”按钮。这样,“朗读单元格”命令便在“开始”选项卡显示出来。同样的道理,将“朗读单元格-停止朗读单元格”按钮也显示在这个工具栏上。结果如图1所示(图1)。

file:///C:/Users/TongJi/AppData/Local/Temp/enhtmlclip/Image.png
未标题-3.jpg

完成以上两步后,用鼠标选择要朗读的单元格,再点击“朗读单元格”按钮,系统便从上到下按顺序朗读单元格,无论是中文还是英文,都能进行朗读,朗读效果良好;点击“朗读单元格-停止朗读单元格”按钮,系统停止朗读。然而,这一功能缺乏对单元格之间间隔进行设置的选项,只能按要求不停地读完所有的单元格。但听写需要时间停顿去写,因此,我们必须通过VBA来解决词与词之间的停顿间隔时间的控制问题。


2. VBA解决停顿间隔控制


要利用Excel VBA进行程序设计,先必须在工具栏中显示“开发工具”。进入“选项”设置对话框,单击左边的“自定义功能区”,在右边窗口中选择“开发工具”前面的复选框,“开发工具”便显示在界面上。


点击“开发工具”选项卡,再点击“Visual Basic”按钮(或按Alt+F11),进入VBA编辑环境,单击“VBAProject (PERSONL.XLSB)”,再选择菜单“插入→用户窗体”,插入一个用户窗体后,修改其名称为tingxie,Caption(即窗体的标题)属性为“听写程序设置”。


在这个用户窗体上,分别添加两个“文字框”控件、两个“标签”控件、两个“命令按钮”控件,这些控件的“名称”都用系统默认的名称。两个“标签”的Caption属性分别是:“单词数量设置”和“听写词间间隔”,这两个标签控件放在两个“文字框”控件的前面,它的作用是为后面两个“文字框”的用途作说明;两个“文字框”的Text属性分别是:20、2,这是这两个“文字框”控件的初始值,程序利用这两个控件让用户输入“单词数量设置”和“听写词间间隔”数值;两个命令控钮的Caption属性分别是:确定、取消。拖动调整好窗体各控件的大小与相对位置至自己感觉合适时为止。结果如图2所示(图2)。


file:///C:/Users/TongJi/AppData/Local/Temp/enhtmlclip/Image(1).png
未标题-1.jpg



3. 听写程序核心技术实现


听写程序核心技术实现分为三部分进行,具体如下。


(1)赋予命令按钮以灵魂


命令按钮要赋予其可执行代码,才能变成一个“活”的按钮。


双击“确定”按钮,在其中输入如下内容:


Private Sub CommandButton1_Click()


n = Val(TextBox1) '获取朗读单词数量


t = Val(TextBox2) '获取朗读词间间隔数量,单位是秒


m = ActiveCell.Row '获取当前活动单元格的行数


c = ActiveCell.Column '获取当前活动单元格的列数


b = m + n - 1 '计算从m开始朗读,共n个单词,达到要求时的最后一行的行数


On Error Resume Next


Call speakcontrol '调用朗读控制过程


tingxie.Hide


End Sub


双击“取消”按钮,在其中输入如下内容:


Private Sub CommandButton2_Click()


tingxie.Hide


End Sub


(2)创建朗读控制过程


这个朗读控制过程的作用是确定朗读的单元格,控制朗读过程中词间间隔,如果完成了所设置的朗读任务,则退出程序。


用鼠标单击“VBAProject (PERSONL.XLSB),再选择菜单“插入→模块”,在这里要完成声明公共变量、创建朗读控制过程以及朗读过程的工作。在其中输入如下内容:


Public a, b, c, m, n, t As Integer '定义公用变量


Sub speakcontrol()


Dim p, q


q = ActiveSheet.Cells(1, 1).SpecialCells(xlLastCell).Row '获取工作表的最后一行


On Error Resume Next


If t < 10 Then


p = "00:00:0" & t '时间在10秒以内时,计算p的方法


Else


p = "00:00:" & t '时间在10秒或以上时,计算p的方法


End If


If m > b Or m > q Then '如果朗读单词达到设置数量的要求或到了最后一行,则退出程序


Exit Sub


Else


a = Cells(m, c) '获取要朗读的单元格的文字


Application.OnTime Now + TimeValue(p), "wordspeak" '按照设定的时间间隔调用朗读过程


End If


End Sub


小提示:


这里还补充说明时间间隔p的计算问题。由于时间间隔t在60秒以内的这个范围内可能是1位数,也可能是2位数,这时p计算方法不一样,因此,我们要对t的位数作判断后再选择计算p合适的方法。


(3)实施具体朗读任务


以上的朗读的控制过程并没有具体实施朗读的工作,朗读的工作由朗读过程完成任务。在以上朗读控制过程的下方,创建一个为wordspeak的朗读过程,内容如下:


Sub wordspeak()


On Error Resume Next


Application.Speech.Speak a '朗读设定单元格中的文字


m = m + 1 '计算朗读的单元格的行数


Call speakcontrol '调用朗读控制过程


End Sub


这个过程具有朗读的功能,并将朗读单元格的行数加1,下移到下一行单元格中,最后返回朗读控制过程,由控制过程确定是否再往下继续朗读单词。


(4)创建启动宏的过程


虽然以上已经有窗体以及相关的控制与朗读的过程,但还缺少一个启动宏的过程。在以上过程的下方创建一个新的过程,命名为“听写”,内容如下:


Sub 听写()


tingxie.Show '显示听写设置窗口


End Sub


未标题-2.jpg




file:///C:/Users/TongJi/AppData/Local/Temp/enhtmlclip/Image(2).png




您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2025-1-10 03:40 , Processed in 0.021320 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表