Excel 如何在一张工作表中使用多个专用子工作表_Change(ByVal目标作为范围)

Excel 如何在一张工作表中使用多个专用子工作表_Change(ByVal目标作为范围),excel,vba,Excel,Vba,大家好, 请任何人都能帮我, 当我在工作表中使用此代码时 Option Explicit Private Sub ComboBox1_GotFocus() ComboBox1.ListFillRange = "DropDownList" Me.ComboBox1.DropDown End Sub Private Sub Worksheet_Change(ByVal Target As Range) On Error Resume Next If Target.Column

大家好, 请任何人都能帮我, 当我在工作表中使用此代码时

Option Explicit

Private Sub ComboBox1_GotFocus()
ComboBox1.ListFillRange = "DropDownList"
Me.ComboBox1.DropDown
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Target.Column = 2 And (Target.Row > 18 And Target.Row < 39) Then
Sheet12.[F5] = ActiveCell.Row
End If

End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
On Error Resume Next
If Target.Column = 2 And (Target.Row > 18 And Target.Row < 39) Then
Sheet12.[F5] = ActiveCell.Row
End If
End Sub
**它也可以完美地工作。我从不面对任何问题或错误。 但当我在工作表中同时使用这两个代码时,它会给我一个错误,因为有两个

私有子工作表_更改(ByVal目标作为范围)

如何将这些代码合并为一个。
请帮助我。***

这是因为您不能使用同一子名称两次。但是,您可以在另一个子对象的内容之前复制其中一个子对象的内容。然后,它们会依次执行

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  On Error Resume Next
  If Target.Column = 2 And (Target.Row > 18 And Target.Row < 39) Then
    Sheet12.[F5] = ActiveCell.Row
  End If
  On Error Goto 0

    Dim rngCell As Range, m, v
    Dim rngCell1 As Range, m1, v1
    
Check1:

    If Application.Intersect(Target, Range("B19:B38")) Is Nothing Then GoTo Check2:
    
    For Each rngCell In Range("B19:B38")
        v = rngCell.Value
        If Len(v) > 0 Then

            'See if the value is in your lookup table
            m = Application.VLookup(v, _
                 ThisWorkbook.Sheets("ItemName").Range("D2:E1001"), 2, False)

            'If found a match then replace wiht the vlookup result
            If Not IsError(m) Then rngCell.Value = m
  End If
    Next
  Exit Sub

Check2:

    If Application.Intersect(Target, Range("A6,D6")) Is Nothing Then Exit Sub

    For Each rngCell1 In Range("A6,D6")
        v1 = rngCell1.Value
        If Len(v1) > 0 Then

            'See if the value is in your lookup table
            m1 = Application.VLookup(v1, _
                 ThisWorkbook.Sheets("PARTY LEDGER").Range("B2:C1001"), 2, False)

            'If found a match then replace wiht the vlookup result
            If Not IsError(m1) Then rngCell1.Value = m1

        End If
        Next


      On Error GoTo Hell
  If Target.Address(False, False) = "A6" And Target.Validation.Type = 3 Then
    Range("B14:B23").Value = ""
  End If
Hell:


End Sub
Private子工作表\u selection更改(ByVal目标作为范围)
出错时继续下一步
如果Target.Column=2且(Target.Row>18且Target.Row<39),则
Sheet12。[F5]=ActiveCell.Row
如果结束
错误转到0
变暗RNG单元作为范围,m,v
变光rngCell1 As范围,m1,v1
检查1:
如果Application.Intersect(目标,范围(“B19:B38”))为空,则转到检查2:
对于范围内的每个rngCell(“B19:B38”)
v=rngCell.值
如果Len(v)>0,则
'查看该值是否在查找表中
m=应用程序VLookup(v_
此工作簿.Sheets(“ItemName”).Range(“D2:E1001”)、2、False)
'如果找到匹配项,则替换为vlookup结果
如果不是IsError(m),则rngCell.Value=m
如果结束
下一个
出口接头
检查2:
如果Application.Intersect(目标,范围(“A6,D6”))为空,则退出Sub
对于范围内的每个rngCell1(“A6,D6”)
v1=rngCell1.值
如果Len(v1)>0,则
'查看该值是否在查找表中
m1=应用程序.VLookup(v1_
此工作簿。工作表(“当事人分类账”)。范围(“B2:C1001”),2,假)
'如果找到匹配项,则替换为vlookup结果
如果不是IsError(m1),则rngCell1.值=m1
如果结束
下一个
错误上地狱
如果Target.Address(False,False)=“A6”且Target.Validation.Type=3,则
范围(“B14:B23”).Value=“”
如果结束
地狱:
端接头

完美先生,毫无疑问,你是个天才,尼罗斯塔先生。完美先生,毫无疑问,你是个天才,尼罗斯塔先生。@SandhuWheels我很高兴能帮上忙。那么,你可以接受这个答案吗?@SandhuWheels如果我的答案对你有帮助,你应该接受它作为一个答案。
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  On Error Resume Next
  If Target.Column = 2 And (Target.Row > 18 And Target.Row < 39) Then
    Sheet12.[F5] = ActiveCell.Row
  End If
  On Error Goto 0

    Dim rngCell As Range, m, v
    Dim rngCell1 As Range, m1, v1
    
Check1:

    If Application.Intersect(Target, Range("B19:B38")) Is Nothing Then GoTo Check2:
    
    For Each rngCell In Range("B19:B38")
        v = rngCell.Value
        If Len(v) > 0 Then

            'See if the value is in your lookup table
            m = Application.VLookup(v, _
                 ThisWorkbook.Sheets("ItemName").Range("D2:E1001"), 2, False)

            'If found a match then replace wiht the vlookup result
            If Not IsError(m) Then rngCell.Value = m
  End If
    Next
  Exit Sub

Check2:

    If Application.Intersect(Target, Range("A6,D6")) Is Nothing Then Exit Sub

    For Each rngCell1 In Range("A6,D6")
        v1 = rngCell1.Value
        If Len(v1) > 0 Then

            'See if the value is in your lookup table
            m1 = Application.VLookup(v1, _
                 ThisWorkbook.Sheets("PARTY LEDGER").Range("B2:C1001"), 2, False)

            'If found a match then replace wiht the vlookup result
            If Not IsError(m1) Then rngCell1.Value = m1

        End If
        Next


      On Error GoTo Hell
  If Target.Address(False, False) = "A6" And Target.Validation.Type = 3 Then
    Range("B14:B23").Value = ""
  End If
Hell:


End Sub