ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > E问E答 > Excel VBA > 如何用vba代码实现图片随机调用及开始停止功能?

如何用vba代码实现图片随机调用及开始停止功能?

作者:绿色风 分类: 时间:2022-08-17 浏览:88
楼主
kevinchengcw
Q: 如何用vba代码实现图片随机调用及开始停止功能?
A: 代码如下:
  1. Dim StopPic As Boolean  '定义开始与停止控制的公共变量
  2. Dim Arr  '定义照片清单数组公共变量

  3. Sub GetList()  '获取照片清单程序
  4. Dim FN$
  5. ReDim Arr(1)  '重定义数组
  6. FN = Dir(ThisWorkbook.Path & "\photo\*.*")  '查找指定照片目录下文件
  7. Do While FN <> ""  '当找到结果不为空时循环
  8.     If Arr(UBound(Arr)) <> "" Then ReDim Preserve Arr(LBound(Arr) To UBound(Arr) + 1)  '如果数组已满则增加一项
  9.     Arr(UBound(Arr)) = FN  '写入当前循环到的文件名
  10.     FN = Dir  '到下一个文件
  11. Loop
  12. End Sub

  13. Sub test()  '图片循环程序
  14. Dim Sh As Shape, N&
  15. Randomize  '初始化随机发生器
  16. Do While StopPic = False  '当停止变量为假时循环执行
  17.     If ActiveSheet.Shapes.Count > 0 Then  '判断当前工作表图片数量,如果有则循环各个图片,删除位于指定图片显示区内的图片
  18.         For Each Sh In ActiveSheet.Shapes
  19.             If Sh.TopLeftCell.Address = "$D$3" Then Sh.Delete
  20.         Next Sh
  21.     End If
  22.     N = ((UBound(Arr) * 10 * Rnd) Mod UBound(Arr)) + 1  '得到一个数组范围内的随机值
  23.     With ActiveSheet.Pictures.Insert(ThisWorkbook.Path & "\photo\" & Arr(N))    '将随机值对应的图片插入到工作表中,左上角在d3单元格位置
  24.         .Top = [d3].Top
  25.         .Left = [d3].Left
  26.         For N = 1 To 1000  '增加个小循环用来延时及判断是否需要停止
  27.             DoEvents
  28.             If StopPic = True Then End
  29.         Next N
  30.         .Delete  '删除当前插入图片
  31.     End With
  32. Loop
  33. End Sub

  34. Sub Pic()  '开始及结束程序
  35. Static S%    '定义静态变量
  36. S = S + 1  '变量自加1
  37. StopPic = (S Mod 2 = 0)  '判断是否为偶数,将判断值赋值给停止变量
  38. If S > 10 Then S = S Mod 10  '防止数值累加后过大,超过取个位数
  39. If IsEmpty(Arr) Then GetList  '如果文件列表未初始化,则调用初始化程序
  40. Application.Run "test"  '调用随机显示图片程序
  41. End Sub

详见附件及素材源帖.
RandomPic.rar
2楼
海洋之星
坐坐K哥的沙发

免责声明

有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素, 经与ExcelTip.Net站长Apolloh商议并征得其同意, 现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示, 供有需要的人士查询使用,也慰缅曾经的论坛时代。 所示各个帖子的原作者如对版权有异议, 可与本人沟通提出,或于本站点留言,我们会尽快处理。 在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一

评论列表
sitemap