2013-06-03 53 views
0

我将工作表代码中的对象(复选框)传递给模块以更新其属性(值和背景颜色)。通过调用模块代码更新对象属性 - Excel VBA

Dim Range1 As Range 
Set Range1 = Range("K2") 
Dim ChkBox1 As Object 
Set ChkBox1 = CheckBox1 

的传球代码:

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 

属性(值和背景色)不会在这个模块中更新,直到代码返回给调用程序,该程序退出。尽管在被调用的过程中立即更新单元的内部颜色。为什么不立即更新复选框属性?

回答

0

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

+0

嗨 - 我正在使用2007 – user2447722

+0

我没有2007年在这里测试,所以将不得不这样做,待其他答复。你是在单步执行代码并观察UI还是使用debug.print语句进行测试?此外,你有哪些SP级别的Office副本补丁? – JosieP

+0

我已经浏览了代码并观察了单元格中的控件。单步执行代码时,将立即更新控件属性和单元格颜色,但在运行代码时,只会立即更新单元格颜色,并且控件属性(颜色和值)仅在调用过程中向用户提供消息框后才会更新。 – user2447722