【问题标题】:VBA - Open a msgbox when cell value = 1VBA - 当单元格值 = 1 时打开一个 msgbox
【发布时间】:2017-03-10 19:37:57
【问题描述】:

我需要一个非常基本的 vba 宏的帮助。当 A6 中的值等于 1 时,工作站中需要出现一个 msgbox。我开发了下面的代码,但问题是当我在电子表格中添加任何其他信息时(例如,如果我在 B6 中写“我喜欢披萨”),msgbox 会再次提示,我只需要它提示一次,就当我将 A6 的值设置为 1 时,您能帮帮我吗?

Private Sub Worksheet_Change(ByVal Target As Range)

If Range("A6").Value = 1 Then
    MsgBox "THIS IS A MSGBOX."
End If

End Sub

@编辑 我忘记了一件非常重要的事情……值“1”是通过 VLOOKUP 获得的,因此它不是由用户手动插入的,对此我很抱歉。我尝试了人们回答的代码,它就在我手动放置 vlue 时起作用,正如我在编辑开始时所说,该值是使用 VLOOKUP 设置的。请问还有什么建议吗?

【问题讨论】:

    标签: vba excel msgbox


    【解决方案1】:

    您需要检查更改是否是由于更改了单元格 A6 而不是其他单元格。 试试这个:

    Private Sub Worksheet_Change(ByVal Target As Range)
      If Target.Column = 1 And Target.Row = 6 Then
        If Target.Value = 1 Then
          MsgBox "THIS IS A MSGBOX."
        End If
      End If
    End Sub
    

    【讨论】:

      【解决方案2】:

      您可以使用此代码代替上一个代码

      Private Sub Worksheet_Change(ByVal Target As Range)
          If Target.Address = Me.Range("A6").Address And Me.Range("A6").Value = 1 Then
              MsgBox "THIS IS A MSGBOX."
          End If
      End Sub
      

      目标是 Excel 中更改的单元格。因此,对于每个更改事件,我都会检查目标是否为 Range("A6")。

      【讨论】:

        【解决方案3】:

        关于语句:我只需要提示一次,你需要保存旧值。所以提示只显示一次,当你将值设置为 1 时。如果 A6 已经是 1,然后你再次输入 1,则没有提示。


        Option Explicit
        
        Dim oldVal
        Private Sub Worksheet_Change(ByVal Target As Range)
            If (Target.Address = "$A$6") Then
                If Target.Value = 1 And Target.Value <> oldVal Then
                    oldVal = Target.Value
                    MsgBox "Test"
                End If
            End If
        End Sub
        

        【讨论】:

        • 这里不使用模块范围的变量,而是使用局部范围的静态变量,即在子例程中使用“Static oldVal”声明变量。
        【解决方案4】:

        您需要检查Worksheet_Change 事件内部,只有当单元格“A6”被按下时,才继续。然后,检查单元格的值是否等于 1。

        Private Sub Worksheet_Change(ByVal Target As Range)
        
        If Not Intersect(Target, Range("A6")) Is Nothing Then
            If Target.Value = 1 Then MsgBox "THIS IS A MSGBOX."
        End If
        
        End Sub
        

        【讨论】:

          【解决方案5】:

          试试这个:

          Private Sub Worksheet_Change(ByVal Target As Range)
              If Target.Address = "$A$6" Then
                  If Target.Value = 1 Then
                      MsgBox "THIS IS A MSGBOX."
                  End If
              End If    
          End Sub
          

          【讨论】:

          • 不,你的意思是Target.Address= "$A$6"
          【解决方案6】:

          我忘记了一件非常重要的事情……值“1”是通过 VLOOKUP 获得的,因此它不是由用户手动插入的,对此我很抱歉。我尝试了人们回答的代码,它就在我手动放置 vlue 时起作用,正如我在编辑开始时所说,该值是使用 VLOOKUP 设置的。请问还有什么建议吗?

          【讨论】:

            猜你喜欢
            • 2020-09-27
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-02-13
            • 2017-05-17
            • 1970-01-01
            • 2021-11-06
            相关资源
            最近更新 更多