设置 ForeColor 不会在 Exit 事件中执行

Set ForeColor won't execute in Exit event

我有一个带有两个滚动条的小型用户表单,我用它来更改单元格值。它们按标签顺序排列,我想在它们获得焦点时显示。因此,我在 Enter 时更改了他们的前景色,并在 Exit 时将其更改回原色。一切正常,除了颜色不会变回。它在 Enter 时更改,但在 Exit 时不变。这是其中之一的代码。

Private Sub ScbWeek_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    ScbWeek.ForeColor = vbWhite
End Sub

我在行上放置了一个断点以查看事件是否触发。确实如此,当我停止后继续代码时,颜色已正确更改。我添加了一个测试:-

Debug.Print "ScbWeek.ForeColor = vbWhite = "; ScbWeek.ForeColor = vbWhite

测试 returns 在运行时为真,但前景色将继续为黄色。白色是原始颜色,在输入时更改为 vbYellow。另一个滚动条从黑色变为 vbRed,并拒绝以同样的方式返回到 vbBlack。我通过跳转到下一个控件(向前和向后)并单击另一个控件来测试退出事件。

表单很小,只有 1 个文本框、2 个按钮、2 个滚动条和一些标签。它是一个相当大的项目的一部分。 ScreenUpdating 不会在显示此表单时被抑制,并且无论如何都会按上述方式显示更改。

我能做什么?

进行此更改并进行测试。这将是用户表单关闭时的事件。

Private Sub ScbWeek_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    MsgBox "userform closed!!"
End Sub

你可以试试

Me.Repaint

应该刷新表单的 UI。

https://docs.microsoft.com/en-us/office/vba/language/reference/user-interface-help/repaint-method