首页 > 解决方案 > 运行宏时更改 ActiveX 控件颜色

问题描述

我有一个ActiveX CommandButton调用startButton,当我单击它时,将运行一个可能需要一段时间才能完成的长宏。所以在运行这个宏时,我想改变&H80FF&这个按钮的颜色(),一旦完成,颜色必须变回原来的颜色(&H8000000F)。所以我写了下面的代码。

Private Sub startButton_Click()
 startButton.BackColor = &H80FF&
 Call initialize_procedures
 startButton.BackColor = &H8000000F
End Sub

但不知何故,它并没有改变颜色,只有当宏完成一个完成消息框时,它才会改变颜色。似乎在运行宏时,工作表显示没有更新。我试图对按钮进行一些重绘。但是按钮没有.Repaint。有人能帮助我吗?

编辑 1

根据建议,我添加DoEvents如下。但它仍然无法正常工作

Private Sub startButton_Click()
 Application.ScreenUpdating = True
 startButton.BackColor = &H80FF&
 DoEvents
 Call initialize_procedures
 startButton.BackColor = &H8000000F
End Sub

标签: excelvba

解决方案


使用此代码进行测试按预期为我工作:

Option Explicit

Private Sub CommandButton1_Click()
    CommandButton1.BackColor = &H80FF&

    DoEvents

    Call initialize_procedures

    CommandButton1.BackColor = &H8000000F
End Sub


Private Sub initialize_procedures()
    Dim tmr As Single
    tmr = Timer

    Do While tmr + 2 > Timer
    Loop
End Sub

在此处输入图像描述


推荐阅读