作者:绿色风
分类:
时间:2022-08-17
浏览:122
楼主 kevinchengcw |
Q: 如何用vba代码实现图片随机调用及开始停止功能? A: 代码如下:
- Dim StopPic As Boolean '定义开始与停止控制的公共变量
- Dim Arr '定义照片清单数组公共变量
- Sub GetList() '获取照片清单程序
- Dim FN$
- ReDim Arr(1) '重定义数组
- FN = Dir(ThisWorkbook.Path & "\photo\*.*") '查找指定照片目录下文件
- Do While FN <> "" '当找到结果不为空时循环
- If Arr(UBound(Arr)) <> "" Then ReDim Preserve Arr(LBound(Arr) To UBound(Arr) + 1) '如果数组已满则增加一项
- Arr(UBound(Arr)) = FN '写入当前循环到的文件名
- FN = Dir '到下一个文件
- Loop
- End Sub
- Sub test() '图片循环程序
- Dim Sh As Shape, N&
- Randomize '初始化随机发生器
- Do While StopPic = False '当停止变量为假时循环执行
- If ActiveSheet.Shapes.Count > 0 Then '判断当前工作表图片数量,如果有则循环各个图片,删除位于指定图片显示区内的图片
- For Each Sh In ActiveSheet.Shapes
- If Sh.TopLeftCell.Address = "$D$3" Then Sh.Delete
- Next Sh
- End If
- N = ((UBound(Arr) * 10 * Rnd) Mod UBound(Arr)) + 1 '得到一个数组范围内的随机值
- With ActiveSheet.Pictures.Insert(ThisWorkbook.Path & "\photo\" & Arr(N)) '将随机值对应的图片插入到工作表中,左上角在d3单元格位置
- .Top = [d3].Top
- .Left = [d3].Left
- For N = 1 To 1000 '增加个小循环用来延时及判断是否需要停止
- DoEvents
- If StopPic = True Then End
- Next N
- .Delete '删除当前插入图片
- End With
- Loop
- End Sub
- Sub Pic() '开始及结束程序
- Static S% '定义静态变量
- S = S + 1 '变量自加1
- StopPic = (S Mod 2 = 0) '判断是否为偶数,将判断值赋值给停止变量
- If S > 10 Then S = S Mod 10 '防止数值累加后过大,超过取个位数
- If IsEmpty(Arr) Then GetList '如果文件列表未初始化,则调用初始化程序
- Application.Run "test" '调用随机显示图片程序
- End Sub
详见附件及素材源帖. RandomPic.rar |
2楼 海洋之星 |
坐坐K哥的沙发 |
免责声明
有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素,
经与ExcelTip.Net站长Apolloh商议并征得其同意,
现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示,
供有需要的人士查询使用,也慰缅曾经的论坛时代。
所示各个帖子的原作者如对版权有异议,
可与本人沟通提出,或于本站点留言,我们会尽快处理。
在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一