1

我写了一个简单的宏

=IF(C2=H2,1,))

所以当 C2 的值等于 H2 的值时,弹出窗口说“HI”出现

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
    Dim rng As Range
    Set rng = Range("H2")
    If Not Intersect(Target, rng) Is Nothing Then
        If rng = "1" Then
            MsgBox "Cell " & _
                   rng.Address & " = hi"
        End If
    End If

    Set rng = Nothing
End Sub

问题是我需要它来发出声音以及弹出声音,更重要的是我需要它来为 1000 行(即 c2、c3、c4 到 c1000)做到这一点。不要告诉我我需要粘贴和复制一千次。

4

2 回答 2

1

很难理解您到底要完成什么,因为您的问题不是很清楚。如果我理解正确,当 H 列中的值发生更改时,您想检查它是否与 C 列中的相应单元格匹配。如果值匹配,您想显示一个消息框并播放声音。这段代码正是这样做的。如果我误解了目标,请澄清,我会尽我所能提供帮助。

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
    On Error Resume Next
    If Target.Column = 8 Then
        If Target.Value = Target.Offset(0, -5).Value Then
            Beep
            MsgBox "Cell " & Target.Address(False, False) & " = Hi"
        End If
    End If
    On Error GoTo 0
End Sub
于 2013-06-17T13:59:53.900 回答
1

尝试这个

Private Sub Worksheet_Change(ByVal Target As Range)
    On Error GoTo Whoa

    Application.EnableEvents = False

    If Not Intersect(Target, Range("C2:C1000")) Is Nothing Then
        If Target.Value = Target.Offset(, 5).Value Then
            Beep
            MsgBox "Blah Blah"
        End If
    '~~> Added Code to handle changes in Col H as well. Thanks to ripster
    ElseIf Not Intersect(Target, Range("H2:H1000")) Is Nothing Then
        If Target.Value = Target.Offset(, -5).Value Then
            Beep
            MsgBox "Blah Blah"
        End If
    End If

Letscontinue:
    Application.EnableEvents = True
    Exit Sub
Whoa:
    MsgBox Err.Description
    Resume Letscontinue
End Sub

我总是建议使用适当的错误处理。您可能还想看看这个

如果有多次粘贴,上面的代码不会处理这种情况。如果您也想检查,请告诉我:)

于 2013-06-17T14:03:42.980 回答