ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 请问各位大佬,抽奖代码为什么无法运行?

[复制链接]

TA的精华主题

TA的得分主题

发表于 2023-3-28 18:30 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 gbabc 于 2023-3-29 15:07 编辑

用的是Microsoft PowerPoint 2016,想弄个抽奖程序,要求:在当前页面,创建一个显示框,当点击开始按钮时,框内随机滚动显示本地文件夹内的图片。当点击停止按钮时,停止滚动。实测代码无法运行,请各位大佬指点,先谢了。

  1. Sub 创建抽奖框()
  2.     Dim shp As Shape
  3.     Dim btn1 As Shape
  4.     Dim btn2 As Shape
  5.     Dim rng As Range
  6.     Dim picName As String
  7.    
  8.     '创建一个显示框
  9.     Set shp = ActivePresentation.Slides(1).Shapes.AddShape(msoShapeRectangle, 100, 100, 500, 300)
  10.     shp.Fill.ForeColor.RGB = RGB(255, 255, 255)
  11.     shp.Line.ForeColor.RGB = RGB(0, 0, 0)
  12.    
  13.     '创建一个开始按钮,并分配宏
  14.     Set btn1 = ActivePresentation.Slides(1).Shapes.AddShape(msoShapeRoundedRectangle, 150, 450, 100, 50)
  15.     btn1.Fill.ForeColor.RGB = RGB(0, 255, 0)
  16.     btn1.Line.ForeColor.RGB = RGB(0, 0, 0)
  17.     btn1.TextFrame.TextRange.Text = "开始"
  18.     btn1.ActionSettings(ppMouseClick).Run = "开始"
  19.    
  20.     '创建一个停止按钮,并分配宏
  21.     Set btn2 = ActivePresentation.Slides(1).Shapes.AddShape(msoShapeRoundedRectangle, 450, 450, 100, 50)
  22.     btn2.Fill.ForeColor.RGB = RGB(255, 0, 0)
  23.     btn2.Line.ForeColor.RGB = RGB(0, 0, 0)
  24.     btn2.TextFrame.TextRange.Text = "停止"
  25.     btn2.ActionSettings(ppMouseClick).Run = "停止"
  26.    
  27. End Sub

  28. Sub 开始()
  29.     '设置图片的路径和文件夹
  30.     Const picPath As String = "D:\抽奖图片"
  31.     Const picFolder As String = "抽奖图片"
  32.    
  33.     '获取图片的文件名列表
  34.     Dim picList() As String
  35.     Dim picCount As Long
  36.     Dim fso As Object
  37.     Dim fld As Object
  38.     Dim fil As Object
  39.    
  40.     Set fso = CreateObject("Scripting.FileSystemObject")
  41.     Set fld = fso.GetFolder(picPath)
  42.    
  43.     For Each fil In fld.Files
  44.         If UCase(fil.Name) Like "*.JPG" Or UCase(fil.Name) Like "*.PNG" Then
  45.             ReDim Preserve picList(picCount)
  46.             picList(picCount) = fil.Name
  47.             picCount = picCount + 1
  48.         End If
  49.     Next fil
  50.    
  51.     '随机选择一个图片文件名,并插入到显示框中
  52.     Dim shp As Shape
  53.     Dim rng As Range
  54.     Dim picName As String
  55.    
  56.     Set shp = ActivePresentation.Slides(1).Shapes(1) '假设显示框是第一个形状,可以根据需要修改
  57.    
  58.     Randomize '初始化随机数种子
  59.    
  60.     Do While SlideShowWindows.Count > 0 '当幻灯片放映时,循环执行以下代码
  61.         
  62.         '删除原有的图片(如果有)
  63.         On Error Resume Next
  64.         shp.Shapes(1).Delete
  65.         
  66.         '随机选择一个图片文件名,并拼接完整的路径
  67.         picName = picList(Int(Rnd * picCount))
  68.         picName = picPath & picName
  69.         
  70.         '在显示框中插入图片,并调整位置和大小
  71.         With shp.Shapes.AddPicture(picName, False, True, -1, -1, -1, -1)
  72.             .LockAspectRatio = msoTrue '保持纵横比
  73.             
  74.             If .Height / .Width > shp.Height / shp.Width Then '根据显示框和图片的纵横比,确定缩放比例
  75.                 .Height = shp.Height - 10 '留出一些边距
  76.                 .Left = shp.Left + (shp.Width - .Width) / 2 '水平居中
  77.                 .Top = shp.Top + 5 '垂直居上
  78.             Else
  79.                 .Width = shp.Width - 10 '留出一些边距
  80.                 .Top = shp.Top + (shp.Height - .Height) / .Left = shp.Left + 5 '水平居左
  81.             End If
  82.         End With
  83.         
  84.         DoEvents '处理其他事件,例如点击停止按钮
  85.         
  86.     Loop
  87.    
  88. End Sub

  89. Sub 停止()
  90.     '停止幻灯片放映
  91.     SlideShowWindows(1).View.State = ppSlideShowDone
  92. End Sub
复制代码



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

本版积分规则

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

GMT+8, 2024-9-29 14:28 , Processed in 0.023729 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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