问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

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

创作时间:
作者:
@小白创作中心

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

引用
CSDN
1.
https://blog.csdn.net/m0_74802518/article/details/137177249

在教学或培训场景中,随机点名是一种常用的教学互动方式。传统的PPT随机点名方法需要为每个人创建单独的幻灯片,操作繁琐且不易维护。本文将介绍如何使用Excel和WPS表格中的宏功能,实现更高效、灵活的滚动式随机点名,并将其集成到PPT中。

一、前言

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

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

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

三、基本思路

  1. 定义相关变量

  2. start 滚动式显示的第一个名字对应的索引

  3. final 点名名单的总人数

  4. i 计数变量

  5. time 延时变量

  6. step 点名的要“滚动式”显示的名字的个数

  7. 产生随机数,将其视为点名开始的位置start

  8. 循环内部嵌套延时函数(毕竟你也不想看到唰的一下程序就结束了,这样根本就看到滚动的效果)

  9. 判断起始位置start与final的关系,避免溢出

输出数据到指定单元格

使用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展示具有程序的模块化之美。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号