如何将 userform 添加到此代码而不是 msgbox?

How to add userform into this code instead of 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 来提醒输入数据的人将以粗体显示 "INCORRECT!" 并被红色包围。 请看下面我要展示的图片

请按照以下步骤操作:

  1. 通过右键单击您的 VBA 项目并在 Insert 选项下选择 UserForm 来插入一个新表单。
  2. 在创建的表单上单击一次,然后按``F4key to open the属性``` window。
  3. Properties window 上,表单的默认名称是 UserForm1。根据需要将其更改为任何新值(例如 WarningBox)
  4. ToolBox window 中,将 Label 拖放到您的表单上并调整其大小、字体、字体颜色以及 [= 上存在的所有其他属性15=] window。请将标签重命名为 message。稍后调用要显示的表单时,我将使用此名称。
  5. 如果您愿意,就像第 4 步一样,将 CommandButton 添加到您的表单并将其名称更改为例如 okButton 并根据需要调整其他属性。
  6. 双击按钮编写此按钮的代码。编写代码如下:
Private Sub okButton_Click()

    'Close the form
    Unload Me
End Sub
  1. 现在,按如下方式修改您的 DisplayUserForm() 子:
Sub DisplayUserForm()

    Dim form As New warningBox
    form.message.Caption = "write your message here"
    form.Show
    Set form = Nothing

End Sub

一切如你所愿!

Marc:如果您的 "Incorrect" 消息是 "LOL" object,您使用代码 form.LOL.Caption = "INCORRECT!" 修改了其标题,如果它是文本框 object。 Saeed Sayyadipour 的示例显示使用标签 object,用户无法编辑该标签(我 'second' 他对 "OK" 按钮的建议)。

此外,由于事件通过定义 "Target" 范围 object 告诉您更改了哪些单元格,您是否真的需要遍历所有 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 之间没有重叠,则不会发生任何事情并且您的代码会快速退出。