【问题标题】:Msgbox with two different criteria具有两个不同标准的 Msgbox
【发布时间】:2016-03-17 06:57:25
【问题描述】:

我有一张excel表格,A、B、C、D列都有。

C 和 D 编号一直在变化(它们有不同的标准),因为它是根据实时获取的库存数据计算的。

当 C 和 D 与我的目标值匹配时,我需要弹出消息框,并在 A 列中显示代码,在 B 列中显示名称,在 C/D 中显示数字。

在只有 C 列时,我知道代码:

Private Sub Worksheet_Change(ByVal Target As Range)
  If Target.column = 3 And Target.value >= -4 And Target.value <= 4 Then
    Call MsgBoxMacro(Target.value, Target.column, Target.row)
  End If
End Sub

Sub MsgBoxMacro(value, column, row)
    MsgBox "Ticker: " & Cells(row, column - 2) & vbNewLine & "Stock Name: " & Cells(row, column - 1) & vbNewLine & "Variable Value: " & value
End Sub

当我想将 D 列数据添加到代码中时,我不知道该怎么做。 (所以当 D 号达到标准时,我可以弹出消息框)请帮助。

谢谢!

【问题讨论】:

    标签: vba excel msgbox


    【解决方案1】:

    通过将另一个参数传递给函数 MsgBoxMacro 将解决您的问题:

    Private Sub Worksheet_Change(ByVal Target As Range)
      If Target.column = 32 And Target.value >= -4 And Target.value <= 4 Then
        Call MsgBoxMacro(Target.value, Target.column, Target.row, 0)
      End If
      If Target.column = 33 And Target.value >= -4 And Target.value <= 4 Then
        Call MsgBoxMacro(Target.value, Target.column, Target.row, 1)
      End If
    End Sub
    
    Sub MsgBoxMacro(value, column, row, counter)
        MsgBox "Ticker: " & Cells(row, column - 31 - counter) & vbNewLine & "Stock Name: " & Cells(row, column - 30 - counter) & vbNewLine & "Variable Value: " & value
    End Sub
    

    希望这会有所帮助。

    【讨论】:

    • 感谢您的帮助!它可以工作,除了列 AF[32] 和列 AG[33] 之外,我需要让它以不同的方式显示变量名,因为 column32 和 33 有自己的标题(变量名)。请帮忙,对不起,我没有把我的问题说清楚。
    • 你的意思是要显示AF列和AG列的名称吗?
    • 是的,我需要显示 AF 和 AG 列的名称,谢谢!
    • 您必须在代码中进行一项更改(显示消息框的位置)以显示列名:
    • @LauraLee - 这里是代码:MsgBox "Ticker: " & Cells(row, column - 31 - counter) & vbNewLine & "Stock Name: " & Cells(row, column - 30 - counter ) & vbNewLine & Cells(1, column) & ": " & value
    【解决方案2】:

    像这样的东西,离你所拥有的不远。这将出现在要进行更改的工作表中。

    Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Column = 4 Then
        If ((Target.Offset(0, -1).Value > -4 And Target.Offset(0, -1).Value < 4) And _
                            (Target.Value > -4 And Target.Value < 4)) Then
            '   Msgbox here
        Else
    
        End If
    
    End If
    End Sub
    

    【讨论】:

    • 感谢您的帮助。因此,将您编写的代码更改为 Private Sub wWorksheet_change(ByVal Target As Range)。但是,Sub MsgBoxMacro 代码呢?因为基于我现在所拥有的,C 将有 MsgBox "Ticker:" & Cells(row, column - 2) & vbNewLine & "Stock Name: " & Cells(row, column - 1)。但是 D 需要 MsgBox "Ticker: " & Cells(row, column - 3) & vbNewLine & "Stock Name: " & Cells(row, column - 2)...我在哪里放置代码?谢谢!
    • 它显示错误,请帮助我。我需要删除我的子模块吗?我在将两个代码放在一起时遇到问题(c & D)
    • 这是我写的: Private Sub Worksheet_Change(ByVal Target As Range) If Target.column = 32 And Target.value >= -4 And Target.value -4 And Target.Offset(0, -1).value -4 And Target.value
    • 如果您已经检查了列是 33,那么就不需要数学,因为它只能是 1 列,所以参考单元格(行,1)而不是列 32,如它只能等于33-32,我认为你需要使用elseif,或者结束第一个if,所以if 1 elseif 2或if 1 end if if 2 end if。我认为你需要 if target.column=32 或 target.column=33 then......
    • 仍然无法正常工作。我尝试在私有子工作表和我的子模块中添加代码,但无论哪种方式,当值符合条件时,不会出现 D 列消息框。我不确定我做错了什么,请帮忙。谢谢。
    猜你喜欢
    • 2021-02-23
    • 2019-11-01
    • 1970-01-01
    • 2013-06-17
    • 2013-07-24
    • 2016-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多