Excel 一个专用子系统下的两个对话框函数

Excel 一个专用子系统下的两个对话框函数,excel,vba,dialog,Excel,Vba,Dialog,我试图让两个对话框在私有子工作表_Change(ByVal Target as Range)下工作。每当有人在范围内输入某个值时,它们就会弹出。第一个很好,但第二个根本不显示。下面是我正在使用的代码 Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range("J2:J54")) Is Nothing Then Exit Sub If Target.Value <> "T

我试图让两个对话框在私有子工作表_Change(ByVal Target as Range)下工作。每当有人在范围内输入某个值时,它们就会弹出。第一个很好,但第二个根本不显示。下面是我正在使用的代码

    Private Sub Worksheet_Change(ByVal Target As Range)
  If Intersect(Target, Range("J2:J54")) Is Nothing Then Exit Sub
  If Target.Value <> "Transportation" Then Exit Sub
     MsgBox "TRANSPORTATION: Remember tolls."
  If Target.Value <> "Guiding" Then Exit Sub
     MsgBox "GUIDING: Remember to add 10%."
End Sub
Private子工作表\u更改(ByVal目标作为范围)
如果Intersect(目标,范围(“J2:J54”))为空,则退出Sub
如果目标值为“运输”,则退出子系统
MsgBox“交通:记住通行费。”
如果目标值为“引导”,则退出Sub
MsgBox“引导:记住添加10%”
端接头

有人能帮我看看哪里出了问题吗?

你在每一点都退出潜艇。试着改变你的逻辑,即:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Intersect(Target, Range("J2:J54")) Is Nothing Then Exit Sub
    If Target.Value = "Transportation" Then
        MsgBox "TRANSPORTATION: Remember tolls."
    ElseIf Target.Value = "Guiding" Then
        MsgBox "GUIDING: Remember to add 10%."
    End If
End Sub

您将在每个点退出sub。试着改变你的逻辑,即:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Intersect(Target, Range("J2:J54")) Is Nothing Then Exit Sub
    If Target.Value = "Transportation" Then
        MsgBox "TRANSPORTATION: Remember tolls."
    ElseIf Target.Value = "Guiding" Then
        MsgBox "GUIDING: Remember to add 10%."
    End If
End Sub

另一种可能是使用
选择案例
,如果不相交,则首先检查
。。。与退出子系统相反,如果Intersect…则为Nothing(无)
,则为Nothing(无)

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("J2:J54")) Is Nothing Then
        Select Case Target.Value
            Case "Transportation"
                MsgBox "TRANSPORTATION: Remember tolls."
            Case "Guiding"
                MsgBox "GUIDING: Remember to add 10%."
        End Select
    End If
End Sub

另一种可能是使用
选择案例
,如果不相交,则首先检查
。。。与退出子系统相反,如果Intersect…则为Nothing(无)
,则为Nothing(无)

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("J2:J54")) Is Nothing Then
        Select Case Target.Value
            Case "Transportation"
                MsgBox "TRANSPORTATION: Remember tolls."
            Case "Guiding"
                MsgBox "GUIDING: Remember to add 10%."
        End Select
    End If
End Sub

在第一个if语句中有exit sub。嵌套第二个if语句,使exit子语句只显示一次。在第一个if语句中有exit子语句。嵌套第二条if语句,使exit子语句只显示一次。或者,如果消息框中的第一个单词始终对应于Target,则合并成一行?@SJR yes也可能,尽管可能会稍微详细一些。实际上,由于消息不同,因此不认为这会起作用。@SJR可能正确,如果您添加了
Case Else,退出Sub
,然后在末尾“构建”带有
Target
MsgBox
,以及消息的变化部分,例如“记住通行费”-但是,这还是太过分了。或者如果消息框中的第一个字始终对应于Target,则合并成一行?@SJR yes也可能,虽然可能会更详细一些。实际上,由于消息不同,因此不认为这会起作用。@SJR可能正确如果您添加了
Case-Else,退出Sub
,然后在末尾用
Target
和消息的更改部分“构建”了
MsgBox
,例如“记住通行费”-不过,这还是有些过火了。