【问题标题】:Updating Object Property by calling module code - Excel VBA通过调用模块代码更新对象属性 - Excel VBA
【发布时间】:2013-06-03 21:28:27
【问题描述】:

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

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

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

【问题讨论】:

    标签: excel vba


    【解决方案1】:

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

    【讨论】:

    • 我这里没有 2007 年可供测试,因此稍后将不得不这样做,等待其他回复。您是在单步执行代码并查看 UI 还是使用 debug.print 语句进行测试?另外,您的 Office 副本修补到什么 SP 级别?
    • 我已经单步执行了代码并观察了单元格中的控件。单步执行代码时,控件属性和单元格颜色会立即更新,但在运行代码时,只有单元格颜色会立即更新,并且控件属性(颜色和值)仅在调用过程中向用户发送消息框后更新.
    • 好的,在 2010 年用 msgbox 进行了测试,并且控件在消息出现之前更新。 2007年如果在消息框行前加上Application.Screenupdating = True,控件会更新吗?
    • 感谢您的建议。尝试了“Application.Screenupdating = True”,但直到调用过程中的 Msgbox 被确定后,CheckBox 控件仍然没有更新颜色或值。
    • 我在 2007 年测试过(版本 12.0.6665.5003 SP3),除非屏幕更新仍然关闭,否则无法重现该问题。
    猜你喜欢
    • 2019-10-25
    • 1970-01-01
    • 2012-06-02
    • 1970-01-01
    • 2019-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多