使用“宏”在excel和WPS表格中实现“滚动式”PPT随机点名

一、前言

        本来想在PPT里面实现“滚动式”随机点名,但网络上提供的方法大都是将每个人的名字各做成一页演示文稿,然后设置自动播放,通过手动控制播放的暂停来实现随机点名。这种方式过于繁琐,且不便于修改点名用的名单,于是自己探索了一下使用excel和wps表格实现随机点名,然后在PPT中使用超链接到对应的excel或wps表格文件,并在其中实现随机点名,最后将点名结果同步到PPT中完成展示。

二、为啥要将excel和wps表格分开

        excel用来编辑宏的语言为vba语言,wps用来编辑宏的语言为js语言(wps也提供vba开发环境,但是需要充值会员才能使用,以下均以js来分析)。语言的不同使得两者宏不能相互兼容,也就是说在excel中编辑好的且运行正常的宏,放到wps中则会报错且无法运行,反之亦然。

三、基本思路

  1. 定义相关变量
    1. start   滚动式显示的第一个名字对应的索引
    2. final    点名名单的总人数
    3. i          计数变量
    4. time    延时变量
    5. step    点名的要“滚动式”显示的名字的个数
  2. 产生随机数,将其视为点名开始的位置start
  3. 循环内部嵌套延时函数(毕竟你也不想看到唰的一下程序就结束了,这样根本就看到滚动的效果)
  4. 判断起始位置start与final的关系,避免溢出
  5. 输出数据到指定单元格

  6. 使用vlookup()实现名字的显示

四、excel实现过程

1.启用宏    

        默认状态下,为了避免被恶意攻击,宏都是被关闭的,需要我们手动启用。

  1. 点击开发工具-宏安全性

  2. 选择启用所有宏(不用的时候建议关闭)

 2.打开代码编辑器

3.创建代码模块

 4.写入代码

(1)构建函数框架 

sub Count()
    函数体
end sub

(2)定义变量

    Dim i As Integer
    Dim time As Single
    Dim start As Integer
    Dim final As Integer
    Dim step As Integer
    step = 8
    final = 21
    time = Timer
    start = Int(Rnd * final)

         使用Rnd返回(0,1]之间的数值,将其乘以final后取整则为(0,final]之间的整数,将这个值赋给start.

(3)构建循环

  For i = 1 To step
        Do
           函数体
        Loop
    Next i

(4)循环内嵌套延时,并判断是否溢出


time = timer
for i = 1 to step
    Do
    If Timer - time > 0.1 Then
        If final - start > step Then
            time = Timer
            Sheet1.Cells(2, 1) = start + i
        Else
            time = Timer
            Sheet1.Cells(2, 1) = start - i
        End If
    Exit Do
    End If
    Loop
Next i

        Timer:返回一个 Single类型的数值,代表从午夜开始到现在经过的秒数。

        在循环外先给time赋值,在循环内判断当前时间与此前的timer记录的时间之差是否大于step,若是,则进行下一步操作。

        判断final-start是否大于step(即判断最终写入单元格的数值是否超出总人数),若大于则每次循环写入单元格B2(sheet1.cells(2,1))递增1,若小于则每次写入的递减1。

(5)完整代码如下

Sub Count()
    Dim i As Integer
    Dim time As Single
    Dim start As Integer
    Dim final As Integer
    Dim step As Integer
    step = 8
    final = 21
    time = Timer
    start = Int(Rnd * final)
    Sheet1.Cells(1, 1) = "初值为:" & start
    For i = 1 To step
        Do
            If Timer - time > 0.1 Then
                If final - start > step Then
                    time = Timer
                    Sheet1.Cells(2, 1) = start + i
                Else
                    time = Timer
                    Sheet1.Cells(2, 1) = start - i
                End If
            Exit Do
            End If
        Loop
    Next i
End Sub

(6)保存代码,另存为.xlsm文件

(7)插入执行宏的按钮,以便运行宏

        在保存后的.xlsm文件中,单击开发工具-插入-按钮

        设置此按钮指向已经编辑好的宏代码(这里为Count)

5.在excel中使用vlookup()函数

                在B2单元格输入=vlookup(A2,你的数据表,名字所在的那一列,False),即可将代码得出的随机数字转换为对应的名字。

6.效果展示

五、wps实现过程

1.启用宏

        与excel类似,在开发工具栏找到“宏安全性”,并设置为对应的权限

2.打开代码编辑器

3.插入模块

4.写入代码

(1)构建基本函数框架

        与excel的vba语言不同,wps使用js语言,定义的框架为函数形式

function test(){
    函数体
}

(2)定义变量

        使用js语言时,无需声明变量类型

        使用Math.random()返回(0,1]的随机数,乘以final则为(0,final]的随机数,再通过Math.round四舍五入得到整数

        使用(new Date).getTime()获得此刻时间

    var i =1
	var time=(new Date).getTime()
	var final=20  //总人数
	var start=Math.round(Math.random()*final)
	var step=10  //设置步长
	var turn=400 //设置延时时间为turn ms

(3)构建循环

while(i<step){
    函数体
    i=i+1
}

(4)循环内嵌套延时,并进行相应判断

        基本原理同excel中vba代码一致

        这里使用Range("D2").Value2=xxx给D2单元格赋值

while(i<step){
		if((new Date).getTime()-time>turn){
			time=(new Date).getTime()
			if(final-start>step){
				Range("D2").Value2=start+i
			}
			else{
				Range("D2").Value2=start-i
			}
			i=i+1
		}
	}

(5)完整代码如下

function test(){
	var i =1
	var time=(new Date).getTime()
	var final=20  //总人数
	var start=Math.round(Math.random()*final)
	var step=10  //设置步长
	var turn=400 //设置延时时间为turn ms
	while(i<step){
		if((new Date).getTime()-time>turn){
			time=(new Date).getTime()
			if(final-start>step){
				Range("D2").Value2=start+i
			}
			else{
				Range("D2").Value2=start-i
			}
			i=i+1
		}
	}
}

(6)保存代码,另存为.xlsm文件

(7)插入宏按钮

        此过程与excel一致

5.在wps表格中使用vlookup()函数

        

6.效果展示

六、链接到PPT中(需要在PPT中开启宏)

1.链接到powerpoint

        在幻灯片中点击插入-对象

        选择“由文件创建”,选择刚才保存宏后的.xlsm  文件     (必须是使用vba语言编写的.xlsm文件)

        点击插入的对象即可跳转到excel中,从而进行随机点名 

2.链接到wps演示

        点击插入-对象

        选择由文件创建(用js语言编写的.xlsm文件)

        单击插入的模块即可跳转至wps表格中进行随机点名

七、总结分析

        代码中设置的参数均可根据个人需要进行修改,而且点名用的名单可以直接复制粘贴到编辑好的.xlsm文件中,只需修改对应参数即可使用。这比在PPT中创建多页幻灯片,然后手动控制播放来实现随机点名更加模块化,便于修改名单和滚动显示的名字的总数(step变量)。

        但不足的是,该方法制作的PPT展示效果欠佳,没有绚丽的特效,后续将想方法解决这个问题,以使该使用宏的随机点名方式能够得到好的展示。希望大家能提供美化建议,让数据分析变得具有可视化的美,让PPT展示具有程序的模块化之美。

  • 17
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值