hardwired 发表于 2022-7-6 22:22:51

每2次更改用户窗体颜色

大家好,
 
使用VBA,有没有一种方法可以每隔20ms左右更改用户窗体的颜色,从而生成一个闪烁、多色的更改窗体。我只是在工作中做一个笑话程序,希望用户表单能够快速更改颜色,比如聚会/庆祝/焰火。。

MSasu 发表于 2022-7-6 22:30:13

你可以尝试这样的方式,但请注意,必须等到“焰火”完成后才能与表单交互。
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Private Sub UserForm_Activate()
   Dim listColors As Variant
   Dim waitTime As Variant
   Dim index As Integer

   listColors = Array(&HFF&, &H80FF&, &HFFFF&, &HFF00&, &HFFFF00, &HFF0000, &HFF00FF)

   For index = 0 To UBound(listColors)
       UserForm1.BackColor = listColors(index)
       UserForm1.Repaint

       Sleep 20
   Next index
End Sub

hardwired 发表于 2022-7-6 22:36:25

嘿Mircea,
 
谢谢,效果很好。我现在确实想在整个事情上添加一个循环,这样它就会循环,直到用户关闭表单,但我相信我能解决这个问题。谢谢你的密码

MSasu 发表于 2022-7-6 22:39:22

完全欢迎你。
关于连续循环,请注意,它可能会迫使用户使用以关闭表单。我不确定在执行“焰火”时是否可以触发其他事件(即按下按钮)。

hardwired 发表于 2022-7-6 22:46:22

是的,我就是这么想的。我正在考虑添加一个错误陷阱,它接受ESC作为陷阱或循环的取消,但这让我有些挠头。这是一种方法吗?

BlackBox 发表于 2022-7-6 22:50:48

 
我只是想说谢谢你在帖子标题中加入“VBA”(所以我知道不要通读整个帖子来找出答案),尤其是因为论坛反馈中的这个帖子没有得到任何吸引力。

hardwired 发表于 2022-7-6 22:58:08

不用担心,我想最好还是说清楚

BlackBox 发表于 2022-7-6 23:03:56

 
干杯伙计

hardwired 发表于 2022-7-6 23:09:56

嘿Mircea(或任何其他可以帮助的人)
 
我已经将代码适应了这一点,它适用于我需要的东西,除了一件事-循环改变了label1和userform的颜色,但是它们并不同步-我希望标签的颜色每次改变颜色时都与表单相同。。
 
有什么想法吗?
 
 

Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)


Private Sub UserForm_Activate()
   Dim listColors As Variant
   Dim waitTime As Variant
   Dim index As Integer
   Dim counter
   
medalform.BackColor = &H800000
Label1.BackColor = &H800000
   
counter = 1

listColors = Array(&HFF&, &H80FF&, &HFFFF&, &HFF00&, &HFFFF00, &HFF0000, &HFF00FF)
   
Do While counter < 5
counter = counter + 1
   For index = 0 To UBound(listColors)
       medalform.BackColor = listColors(index)
       medalform.Repaint
       Label1.BackColor = listColors(index)
       Sleep 200
   Next index
Loop

medalform.BackColor = &H800000
Label1.BackColor = &H800000
End Sub

MSasu 发表于 2022-7-6 23:15:01

您应该在更改标签的颜色之后而不是之前调用重新绘制方法。
页: [1] 2
查看完整版本: 每2次更改用户窗体颜色