乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 107|回复: 11

[编程交流] 每2次更改用户窗体颜色

[复制链接]

46

主题

118

帖子

23

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
291
发表于 2022-7-6 22:22:51 | 显示全部楼层 |阅读模式
大家好,
 
使用VBA,有没有一种方法可以每隔20ms左右更改用户窗体的颜色,从而生成一个闪烁、多色的更改窗体。我只是在工作中做一个笑话程序,希望用户表单能够快速更改颜色,比如聚会/庆祝/焰火。。
回复

使用道具 举报

35

主题

2471

帖子

2447

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2022-7-6 22:30:13 | 显示全部楼层
你可以尝试这样的方式,但请注意,必须等到“焰火”完成后才能与表单交互。
  1. Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
  2. Private Sub UserForm_Activate()
  3.    Dim listColors As Variant
  4.    Dim waitTime As Variant
  5.    Dim index As Integer
  6.    listColors = Array(&HFF&, &H80FF&, &HFFFF&, &HFF00&, &HFFFF00, &HFF0000, &HFF00FF)
  7.    For index = 0 To UBound(listColors)
  8.        UserForm1.BackColor = listColors(index)
  9.        UserForm1.Repaint
  10.        Sleep 20
  11.    Next index
  12. End Sub
回复

使用道具 举报

46

主题

118

帖子

23

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
291
发表于 2022-7-6 22:36:25 | 显示全部楼层
嘿Mircea,
 
谢谢,效果很好。我现在确实想在整个事情上添加一个循环,这样它就会循环,直到用户关闭表单,但我相信我能解决这个问题。谢谢你的密码
回复

使用道具 举报

35

主题

2471

帖子

2447

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2022-7-6 22:39:22 | 显示全部楼层
完全欢迎你。
关于连续循环,请注意,它可能会迫使用户使用以关闭表单。我不确定在执行“焰火”时是否可以触发其他事件(即按下按钮)。
回复

使用道具 举报

46

主题

118

帖子

23

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
291
发表于 2022-7-6 22:46:22 | 显示全部楼层
是的,我就是这么想的。我正在考虑添加一个错误陷阱,它接受ESC作为陷阱或循环的取消,但这让我有些挠头。这是一种方法吗?
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-6 22:50:48 | 显示全部楼层
 
我只是想说谢谢你在帖子标题中加入“VBA”(所以我知道不要通读整个帖子来找出答案),尤其是因为论坛反馈中的这个帖子没有得到任何吸引力。
回复

使用道具 举报

46

主题

118

帖子

23

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
291
发表于 2022-7-6 22:58:08 | 显示全部楼层
不用担心,我想最好还是说清楚
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-6 23:03:56 | 显示全部楼层
 
干杯伙计
回复

使用道具 举报

46

主题

118

帖子

23

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
291
发表于 2022-7-6 23:09:56 | 显示全部楼层
嘿Mircea(或任何其他可以帮助的人)
 
我已经将代码适应了这一点,它适用于我需要的东西,除了一件事-循环改变了label1和userform的颜色,但是它们并不同步-我希望标签的颜色每次改变颜色时都与表单相同。。
 
有什么想法吗?
 
 
  1. Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
  2. Private Sub UserForm_Activate()
  3.    Dim listColors As Variant
  4.    Dim waitTime As Variant
  5.    Dim index As Integer
  6.    Dim counter
  7.    
  8. medalform.BackColor = &H800000
  9. Label1.BackColor = &H800000
  10.    
  11. counter = 1
  12. listColors = Array(&HFF&, &H80FF&, &HFFFF&, &HFF00&, &HFFFF00, &HFF0000, &HFF00FF)
  13.    
  14. Do While counter < 5
  15. counter = counter + 1
  16.    For index = 0 To UBound(listColors)
  17.        medalform.BackColor = listColors(index)
  18.        medalform.Repaint
  19.        Label1.BackColor = listColors(index)
  20.        Sleep 200
  21.    Next index
  22. Loop
  23. medalform.BackColor = &H800000
  24. Label1.BackColor = &H800000
  25. End Sub
回复

使用道具 举报

35

主题

2471

帖子

2447

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2022-7-6 23:15:01 | 显示全部楼层
您应该在更改标签的颜色之后而不是之前调用重新绘制方法。
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-4 11:44 , Processed in 0.659095 second(s), 72 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表