通过调用模块代码更新对象属性-Excel VBA

通过调用模块代码更新对象属性-Excel VBA,excel,vba,Excel,Vba,我将一个对象(复选框)从工作表代码传递到模块,以更新其属性(值和背景色) 通过的代码是: If CheckBox1.Value = True Then SetGreen R1:=Range1, C1:=ChkBox1 Else SetRed R1:=Range1, C1:=ChkBox1 End If 因此,如果勾选了复选框,则将背景色设置为绿色,如果未勾选,则将其设置为红色 被调用的设置为红色的程序代码为: Sub SetRed(ByVal R1 As Range, ByVa

我将一个对象(复选框)从工作表代码传递到模块,以更新其属性(值和背景色)

通过的代码是:

If CheckBox1.Value = True Then
    SetGreen R1:=Range1, C1:=ChkBox1
Else
    SetRed R1:=Range1, C1:=ChkBox1
End If
因此,如果勾选了复选框,则将背景色设置为绿色,如果未勾选,则将其设置为红色

被调用的设置为红色的程序代码为:

Sub SetRed(ByVal R1 As Range, ByVal C1 As Object)
    R1.Interior.Color = RGB(255, 0, 0)
    With C1
        .BackColor = RGB(255, 0, 0)
        .Value = False
    End With
End Sub

在代码返回到调用过程并且该过程退出之前,此模块中的属性(值和背景色)不会更新。不过,在调用的过程中,单元的内部颜色会立即更新。为什么不立即更新复选框属性?

您使用的是哪个版本的Excel?在2010年,我可以在调用的例程中看到控件更新,属性值也相应更改。

我这里没有要测试的2007,因此必须稍后进行测试,等待其他响应。您是单步执行代码并查看UI还是使用debug.print语句进行测试?另外,您将Office的副本修补到哪个SP级别?我已逐步浏览了代码并查看了单元格中的控件。单步执行代码时,控件属性和单元格颜色会立即更新,但运行代码时,只有单元格颜色会立即更新,控件属性(颜色和值)会在呼叫过程中确认发送给用户的消息框后更新。确定,在2010年使用msgbox进行了测试,控件在消息出现之前进行了更新。在2007年,如果在消息框行之前添加
Application.screenUpdate=True
,控件将更新?感谢您的建议。尝试了“Application.screenUpdate=True”,但复选框控件直到在调用过程中确定Msgbox之后才更新颜色或值。我在2007年进行了测试(版本12.0.6665.5003 SP3),除非屏幕更新仍处于关闭状态,否则无法再现该问题。
Sub SetRed(ByVal R1 As Range, ByVal C1 As Object)
    R1.Interior.Color = RGB(255, 0, 0)
    With C1
        .BackColor = RGB(255, 0, 0)
        .Value = False
    End With
End Sub