Consulting

Results 1 to 3 of 3

Thread: Solved: Nesting in a Private Sub Worksheet_Change

  1. #1
    VBAX Regular
    Joined
    Mar 2009
    Posts
    29
    Location

    Unhappy Solved: Nesting in a Private Sub Worksheet_Change

    I need to know what I'm doing wrong here.
    This code works:
        Private Sub Worksheet_Change(ByVal Target As Range)
       
      Dim rng As Range, rng2 As Range
       
      If Target.Column > 1 Then Exit Sub
      Set rng2 = Sheets("Data").Range("A2:E2000")
      For Each rng In Target
          If Len(rng) > 0 Then
              rng.Offset(, 1) = WorksheetFunction.VLookup(rng, rng2, 3, 0)
              rng.Offset(, 2) = WorksheetFunction.VLookup(rng, rng2, 5, 0)
          Else
              rng.Offset(, 1).Resize(, 2).ClearContents
          End If
      Next rng
       
      End Sub
    I want to have 2 looks ups or more, but I keep getting a message when I try this:

        Private Sub Worksheet_Change(ByVal Target As Range)
       
      Dim rng As Range, rng2 As Range
      Dim rng3 As Range, rng4 As Range
      If Target.Column = 1 Then
      Set rng2 = Sheets("Data").Range("A2:E2000")
      For Each rng In Target
          If Len(rng) > 0 Then
              rng.Offset(, 1) = WorksheetFunction.VLookup(rng, rng2, 3, 0)
              rng.Offset(, 2) = WorksheetFunction.VLookup(rng, rng2, 5, 0)
          Else
              rng.Offset(, 1).Resize(, 2).ClearContents
              End If
         Next rng
         
      If Target.Column = 6 Then
      Set rng4 = Sheets("Data").Range("G2:H2000")
      For Each rng3 In Target
          If Len(rng3) > 0 Then
              rng3.Offset(, 1) = WorksheetFunction.VLookup(rng3, rng4, 2, 0)
              rng3.Offset(, 2) = WorksheetFunction.VLookup(rng3, rng4, 2, 0)
          Else
              rng3.Offset(, 1).Resize(, 2).ClearContents
          
          End If
      Next rng3
      End Sub
    How can I get the last code to work?
    Thanks,
    Xrull

  2. #2
    Distinguished Lord of VBAX VBAX Grand Master Bob Phillips's Avatar
    Joined
    Apr 2005
    Posts
    25,453
    Location
    [vba]

    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim rng As Range, rng2 As Range
    Dim rng3 As Range, rng4 As Range

    If Target.Column = 1 Then
    Set rng2 = Sheets("Data").Range("A2:E2000")
    For Each rng In Target
    If Len(rng) > 0 Then
    rng.Offset(, 1) = WorksheetFunction.VLookup(rng, rng2, 3, 0)
    rng.Offset(, 2) = WorksheetFunction.VLookup(rng, rng2, 5, 0)
    Else
    rng.Offset(, 1).Resize(, 2).ClearContents
    End If
    Next rng

    ElseIf Target.Column = 6 Then
    Set rng4 = Sheets("Data").Range("G2:H2000")
    For Each rng3 In Target
    If Len(rng3) > 0 Then
    rng3.Offset(, 1) = WorksheetFunction.VLookup(rng3, rng4, 2, 0)
    rng3.Offset(, 2) = WorksheetFunction.VLookup(rng3, rng4, 2, 0)
    Else
    rng3.Offset(, 1).Resize(, 2).ClearContents
    End If
    Next rng3
    End If
    End Sub
    [/vba]
    ____________________________________________
    Nihil simul inventum est et perfectum

    Abusus non tollit usum

    Last night I dreamed of a small consolation enjoyed only by the blind: Nobody knows the trouble I've not seen!
    James Thurber

  3. #3
    VBAX Regular
    Joined
    Mar 2009
    Posts
    29
    Location

    Thumbs up

    xld,
    That's what I was looking for.
    Xrull

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •