首页 > 解决方案 > 如何将用户表单添加到此代码中而不是 msgbox?

问题描述

我目前有这个代码

Private Sub Worksheet_Change(ByVal Target As Range)
Dim myCell As Range

For Each myCell In Range("G4:G160")

    If (Not IsEmpty(myCell)) And myCell.Value <> 17521 And myCell.Value <> "" Then

        DisplayUserForm

        Exit Sub
    End If

Next myCell
End Sub

并将其用于我的用户表单

Sub DisplayUserForm()

Dim form As New WarningBox
form.LOL.Caption = "INCORRECT!"
form.Show
Set form = Nothing

结束子

我还必须做什么才能出现而不是 msgbox 来提醒正在输入数据的人将显示“不正确!” 粗体并被红色包围。请参阅下面的图片,了解我要展示的内容 在此处输入图像描述

标签: vbauserformmsgbox

解决方案


Marc:如果您的“不正确”消息是您使用代码修改其标题的“LOL”对象,form.LOL.Caption = "INCORRECT!"如果它是 TextBox 对象,它将是可编辑的。Saeed Sayyadipour 的示例显示了使用 Label 对象,而不是用户无法编辑的对象(我“同意”他关于“确定”按钮的建议)。

此外,由于事件通过定义“Target”范围对象告诉您哪些单元格发生了更改,您是否真的需要循环遍历所有 G4:G160,因为用户只更改了 Target 中的单元格?也许使用For Each MyCell in Intersect(Target,Range("G4:G160")),或者在适当的地方添加这些行:

Dim AffectedCells as Range
...
Set AffectedCells=Intersect(Target,Range("G4:G160"))
...
Set AffectedCells=Nothing

并将您的循环更改为:

For Each myCell in AffectedCells
...
Next myCell

如果更改的范围(目标)和您的 G4:G160 之间没有重叠,则不会发生任何事情并且您的代码会快速退出。


推荐阅读