设置 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
我有一个带有两个滚动条的小型用户表单,我用它来更改单元格值。它们按标签顺序排列,我想在它们获得焦点时显示。因此,我在 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