检测到不明确的名称Worksheet_Change

时间:2015-04-09 01:25:17

标签: excel excel-vba vba

我遇到了宏的问题,因为它给我检测到了不明确的名称Worksheet_Change。如果用户在B列下的任何单元格上输入一个值,它将自动运行一个宏,如果用户在F列上输入一个值,它将自动运行另一个宏,但我不知道如何修复此错误。请下面的代码

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Columns("B")) Is Nothing Then
        On Error GoTo Safe_Exit
        Application.EnableEvents = False
        Dim rng As Range
        For Each rng In Intersect(Target, Columns("B"))
            If rng.Row > 2 Then ' your sample code seemed to suggest that this should start on row 3 and higher
                Call MyMacro(rng.Row)
            End If
        Next rng
    End If
Safe_Exit:
    Application.EnableEvents = True
End Sub

Sub MyMacro(rw As Long)
    If Range("B" & rw) = "" Then
        MsgBox "Ingrese El account Number"
    Else
        Range("J" & rw & ":K" & rw) = Range("J" & rw & ":K" & rw).Value
    End If
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Columns("F")) Is Nothing Then
        On Error GoTo Safe_Exit
        Application.EnableEvents = False
        Dim rng As Range
        For Each rng In Intersect(Target, Columns("F"))
            If rng.Row > 3 Then ' your sample code seemed to suggest that this should start on row 3 and higher
                Call Foolish(rng.Row)
            End If
        Next rng
    End If
Safe_Exit:
    Application.EnableEvents = True
End Sub

Sub Foolish(rw As Long)
    If Range("F" & rw) = "" Then
        MsgBox "Ingrese El account Number"
    Else
        Range("G" & rw & ":H" & rw) = Range("G" & rw & ":H" & rw).Value
    End If
End Sub

1 个答案:

答案 0 :(得分:0)

您的工作表中发生了两个Worksheet_change()个潜艇。复制其中一个子例程的内容并将其粘贴到另一个子例程中,这样只有一个worksheet_change事件。

例如:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Columns("B")) Is Nothing Then
        On Error GoTo Safe_Exit
        Application.EnableEvents = False
        Dim rng As Range
        For Each rng In Intersect(Target, Columns("B"))
            If rng.Row > 2 Then ' your sample code seemed to suggest that this should start on row 3 and higher
                Call MyMacro(rng.Row)
            End If
        Next rng
    End If

    If Not Intersect(Target, Columns("F")) Is Nothing Then
        On Error GoTo Safe_Exit
        Application.EnableEvents = False
        Dim rng As Range
        For Each rng In Intersect(Target, Columns("F"))
            If rng.Row > 3 Then ' your sample code seemed to suggest that this should start on row 3 and higher
                Call Foolish(rng.Row)
            End If
        Next rng
    End If

Safe_Exit:
    Application.EnableEvents = True
End Sub

Sub MyMacro(rw As Long)
    If Range("B" & rw) = "" Then
        MsgBox "Ingrese El account Number"
    Else
        Range("J" & rw & ":K" & rw) = Range("J" & rw & ":K" & rw).Value
    End If
End Sub