ExcelBanter

ExcelBanter (https://www.excelbanter.com/)
-   Excel Programming (https://www.excelbanter.com/excel-programming/)
-   -   Help with VLOOKUP / VBA code, please... (https://www.excelbanter.com/excel-programming/370877-help-vlookup-vba-code-please.html)

Bruise[_3_]

Help with VLOOKUP / VBA code, please...
 
Hello!

I received assistance in an earlier post that helped tremendously, but I'm
having an additional problem with the code I received.

Situation: I import a 3 column list into a worksheet in Excel. On several
other sheets, I run a VLOOKUP code in VBA to auto-enter data. When certain
criteria is entered in cell A1, VLOOKUP enters the corresponding results
into the same row into B1 and C1. I'm using the following code:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim rng As Range, res As Variant
If Target.Address = "$A$1" Then
Set rng = Worksheets("Sheet2").Range("A1:C1800")
res = Application.VLookup(Target, rng, 2, False)
If IsError(res) Then
Range("B1:C1").Value = "Manual Entry Required"
Else
Range("B1").Value = res
Range("C1").Value = Application.VLookup(Target, _
rng, 3, False)
End If
End If
End Sub

This code only targets cell A1 on the current worksheet. I need it to
target about 100 rows of column A so if the data entered in cell A55 is
different than the data entered in cell A1, it returns the proper info for
data entered in A55.

I've tried using several Target.Range codes, to no avail.

Any help would greatly be appreciated.



Dave Peterson

Help with VLOOKUP / VBA code, please...
 
Untested...

Private Sub Worksheet_Change(ByVal Target As Range)
Dim rng As Range, res As Variant

if target.cells.count 1 then exit sub
if intersect(target,me.range("a1:A100")) is nothing then exit sub

Set rng = Worksheets("Sheet2").Range("A1:C1800")

res = Application.VLookup(Target, rng, 2, False)

If IsError(res) Then
target.offset(0,1).resize(1,2).Value = "Manual Entry Required"
Else
target.offset(0,1).Value = res
target.offset(0,2).Value = Application.VLookup(Target, rng, 3, False)
End If

End Sub

(Watch for typos!)

Bruise wrote:

Hello!

I received assistance in an earlier post that helped tremendously, but I'm
having an additional problem with the code I received.

Situation: I import a 3 column list into a worksheet in Excel. On several
other sheets, I run a VLOOKUP code in VBA to auto-enter data. When certain
criteria is entered in cell A1, VLOOKUP enters the corresponding results
into the same row into B1 and C1. I'm using the following code:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim rng As Range, res As Variant
If Target.Address = "$A$1" Then
Set rng = Worksheets("Sheet2").Range("A1:C1800")
res = Application.VLookup(Target, rng, 2, False)
If IsError(res) Then
Range("B1:C1").Value = "Manual Entry Required"
Else
Range("B1").Value = res
Range("C1").Value = Application.VLookup(Target, _
rng, 3, False)
End If
End If
End Sub

This code only targets cell A1 on the current worksheet. I need it to
target about 100 rows of column A so if the data entered in cell A55 is
different than the data entered in cell A1, it returns the proper info for
data entered in A55.

I've tried using several Target.Range codes, to no avail.

Any help would greatly be appreciated.


--

Dave Peterson

Dave Peterson

Help with VLOOKUP / VBA code, please...
 
Ps. It's probably best to stop the changes the code makes from firing the
event, too:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim rng As Range, res As Variant

if target.cells.count 1 then exit sub
if intersect(target,me.range("a1:A100")) is nothing then exit sub

Set rng = Worksheets("Sheet2").Range("A1:C1800")

res = Application.VLookup(Target, rng, 2, False)

application.enableevents = false
If IsError(res) Then
target.offset(0,1).resize(1,2).Value = "Manual Entry Required"
Else
target.offset(0,1).Value = res
target.offset(0,2).Value = Application.VLookup(Target, rng, 3, False)
End If
application.enableevents = true

End Sub

(I added the .enableevents lines.)

Bruise wrote:

Hello!

I received assistance in an earlier post that helped tremendously, but I'm
having an additional problem with the code I received.

Situation: I import a 3 column list into a worksheet in Excel. On several
other sheets, I run a VLOOKUP code in VBA to auto-enter data. When certain
criteria is entered in cell A1, VLOOKUP enters the corresponding results
into the same row into B1 and C1. I'm using the following code:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim rng As Range, res As Variant
If Target.Address = "$A$1" Then
Set rng = Worksheets("Sheet2").Range("A1:C1800")
res = Application.VLookup(Target, rng, 2, False)
If IsError(res) Then
Range("B1:C1").Value = "Manual Entry Required"
Else
Range("B1").Value = res
Range("C1").Value = Application.VLookup(Target, _
rng, 3, False)
End If
End If
End Sub

This code only targets cell A1 on the current worksheet. I need it to
target about 100 rows of column A so if the data entered in cell A55 is
different than the data entered in cell A1, it returns the proper info for
data entered in A55.

I've tried using several Target.Range codes, to no avail.

Any help would greatly be appreciated.


--

Dave Peterson

Bruise[_3_]

Help with VLOOKUP / VBA code, please...
 
Tested...and it works beautifully!

Thank you, Dave!


"Dave Peterson" wrote in message
...
Untested...

Private Sub Worksheet_Change(ByVal Target As Range)
Dim rng As Range, res As Variant

if target.cells.count 1 then exit sub
if intersect(target,me.range("a1:A100")) is nothing then exit sub

Set rng = Worksheets("Sheet2").Range("A1:C1800")

res = Application.VLookup(Target, rng, 2, False)

If IsError(res) Then
target.offset(0,1).resize(1,2).Value = "Manual Entry Required"
Else
target.offset(0,1).Value = res
target.offset(0,2).Value = Application.VLookup(Target, rng, 3, False)
End If

End Sub

(Watch for typos!)

Bruise wrote:

Hello!

I received assistance in an earlier post that helped tremendously, but

I'm
having an additional problem with the code I received.

Situation: I import a 3 column list into a worksheet in Excel. On

several
other sheets, I run a VLOOKUP code in VBA to auto-enter data. When

certain
criteria is entered in cell A1, VLOOKUP enters the corresponding results
into the same row into B1 and C1. I'm using the following code:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim rng As Range, res As Variant
If Target.Address = "$A$1" Then
Set rng = Worksheets("Sheet2").Range("A1:C1800")
res = Application.VLookup(Target, rng, 2, False)
If IsError(res) Then
Range("B1:C1").Value = "Manual Entry Required"
Else
Range("B1").Value = res
Range("C1").Value = Application.VLookup(Target, _
rng, 3, False)
End If
End If
End Sub

This code only targets cell A1 on the current worksheet. I need it to
target about 100 rows of column A so if the data entered in cell A55 is
different than the data entered in cell A1, it returns the proper info

for
data entered in A55.

I've tried using several Target.Range codes, to no avail.

Any help would greatly be appreciated.


--

Dave Peterson




Bruise[_3_]

Help with VLOOKUP / VBA code, please...
 
Out of curiousity, why would I want to do this? What are the consequences
if I don't add this code?

I'm just trying to learn more about this. Thanks.


"Dave Peterson" wrote in message
...
Ps. It's probably best to stop the changes the code makes from firing the
event, too:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim rng As Range, res As Variant

if target.cells.count 1 then exit sub
if intersect(target,me.range("a1:A100")) is nothing then exit sub

Set rng = Worksheets("Sheet2").Range("A1:C1800")

res = Application.VLookup(Target, rng, 2, False)

application.enableevents = false
If IsError(res) Then
target.offset(0,1).resize(1,2).Value = "Manual Entry Required"
Else
target.offset(0,1).Value = res
target.offset(0,2).Value = Application.VLookup(Target, rng, 3, False)
End If
application.enableevents = true

End Sub

(I added the .enableevents lines.)

Bruise wrote:

Hello!

I received assistance in an earlier post that helped tremendously, but

I'm
having an additional problem with the code I received.

Situation: I import a 3 column list into a worksheet in Excel. On

several
other sheets, I run a VLOOKUP code in VBA to auto-enter data. When

certain
criteria is entered in cell A1, VLOOKUP enters the corresponding results
into the same row into B1 and C1. I'm using the following code:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim rng As Range, res As Variant
If Target.Address = "$A$1" Then
Set rng = Worksheets("Sheet2").Range("A1:C1800")
res = Application.VLookup(Target, rng, 2, False)
If IsError(res) Then
Range("B1:C1").Value = "Manual Entry Required"
Else
Range("B1").Value = res
Range("C1").Value = Application.VLookup(Target, _
rng, 3, False)
End If
End If
End Sub

This code only targets cell A1 on the current worksheet. I need it to
target about 100 rows of column A so if the data entered in cell A55 is
different than the data entered in cell A1, it returns the proper info

for
data entered in A55.

I've tried using several Target.Range codes, to no avail.

Any help would greatly be appreciated.


--

Dave Peterson




Dave Peterson

Help with VLOOKUP / VBA code, please...
 
When you change a cell (or even when the code changes the cell), the event will
fire.

In this case, since you're changing something in column B and C, the code fires,
but exits pretty fast--as soon as that check for the correct column is made.

But you/your code could get into trouble under certain conditions.

Try this in a test worksheet.

Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Cells.Count 1 Then Exit Sub
If Intersect(Target, Me.Range("a:a")) Is Nothing Then Exit Sub

Target.Offset(1, 0).Value = "hi there"

End Sub

And make a change to A1. The code will be called over and over and over--until
excel gets tired and gives up. (In theory, the code could go until it runs out
of rows and then blows up when it tries to get to the next one.)

So it's better to stop those things from happening.

Make this change and you'll see a difference--maybe even in speed, since the
routine is doing lots less.

application.enableevents = false
Target.Offset(1, 0).Value = "hi there"
application.enableevents = true




Bruise wrote:

Out of curiousity, why would I want to do this? What are the consequences
if I don't add this code?

I'm just trying to learn more about this. Thanks.

"Dave Peterson" wrote in message
...
Ps. It's probably best to stop the changes the code makes from firing the
event, too:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim rng As Range, res As Variant

if target.cells.count 1 then exit sub
if intersect(target,me.range("a1:A100")) is nothing then exit sub

Set rng = Worksheets("Sheet2").Range("A1:C1800")

res = Application.VLookup(Target, rng, 2, False)

application.enableevents = false
If IsError(res) Then
target.offset(0,1).resize(1,2).Value = "Manual Entry Required"
Else
target.offset(0,1).Value = res
target.offset(0,2).Value = Application.VLookup(Target, rng, 3, False)
End If
application.enableevents = true

End Sub

(I added the .enableevents lines.)

Bruise wrote:

Hello!

I received assistance in an earlier post that helped tremendously, but

I'm
having an additional problem with the code I received.

Situation: I import a 3 column list into a worksheet in Excel. On

several
other sheets, I run a VLOOKUP code in VBA to auto-enter data. When

certain
criteria is entered in cell A1, VLOOKUP enters the corresponding results
into the same row into B1 and C1. I'm using the following code:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim rng As Range, res As Variant
If Target.Address = "$A$1" Then
Set rng = Worksheets("Sheet2").Range("A1:C1800")
res = Application.VLookup(Target, rng, 2, False)
If IsError(res) Then
Range("B1:C1").Value = "Manual Entry Required"
Else
Range("B1").Value = res
Range("C1").Value = Application.VLookup(Target, _
rng, 3, False)
End If
End If
End Sub

This code only targets cell A1 on the current worksheet. I need it to
target about 100 rows of column A so if the data entered in cell A55 is
different than the data entered in cell A1, it returns the proper info

for
data entered in A55.

I've tried using several Target.Range codes, to no avail.

Any help would greatly be appreciated.


--

Dave Peterson


--

Dave Peterson

Bruise[_3_]

Help with VLOOKUP / VBA code, please...
 
Thanks, Dave. I understand that and I can see how it works. I appreciate
the time out to 'teach' me something. That's what keeps us coming back for
more knowledge... ;)

Bruise


"Dave Peterson" wrote in message
...
When you change a cell (or even when the code changes the cell), the event

will
fire.

In this case, since you're changing something in column B and C, the code

fires,
but exits pretty fast--as soon as that check for the correct column is

made.

But you/your code could get into trouble under certain conditions.

Try this in a test worksheet.

Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Cells.Count 1 Then Exit Sub
If Intersect(Target, Me.Range("a:a")) Is Nothing Then Exit Sub

Target.Offset(1, 0).Value = "hi there"

End Sub

And make a change to A1. The code will be called over and over and

over--until
excel gets tired and gives up. (In theory, the code could go until it

runs out
of rows and then blows up when it tries to get to the next one.)

So it's better to stop those things from happening.

Make this change and you'll see a difference--maybe even in speed, since

the
routine is doing lots less.

application.enableevents = false
Target.Offset(1, 0).Value = "hi there"
application.enableevents = true




Bruise wrote:

Out of curiousity, why would I want to do this? What are the

consequences
if I don't add this code?

I'm just trying to learn more about this. Thanks.

"Dave Peterson" wrote in message
...
Ps. It's probably best to stop the changes the code makes from firing

the
event, too:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim rng As Range, res As Variant

if target.cells.count 1 then exit sub
if intersect(target,me.range("a1:A100")) is nothing then exit sub

Set rng = Worksheets("Sheet2").Range("A1:C1800")

res = Application.VLookup(Target, rng, 2, False)

application.enableevents = false
If IsError(res) Then
target.offset(0,1).resize(1,2).Value = "Manual Entry Required"
Else
target.offset(0,1).Value = res
target.offset(0,2).Value = Application.VLookup(Target, rng, 3,

False)
End If
application.enableevents = true

End Sub

(I added the .enableevents lines.)

Bruise wrote:

Hello!

I received assistance in an earlier post that helped tremendously,

but
I'm
having an additional problem with the code I received.

Situation: I import a 3 column list into a worksheet in Excel. On

several
other sheets, I run a VLOOKUP code in VBA to auto-enter data. When

certain
criteria is entered in cell A1, VLOOKUP enters the corresponding

results
into the same row into B1 and C1. I'm using the following code:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim rng As Range, res As Variant
If Target.Address = "$A$1" Then
Set rng = Worksheets("Sheet2").Range("A1:C1800")
res = Application.VLookup(Target, rng, 2, False)
If IsError(res) Then
Range("B1:C1").Value = "Manual Entry Required"
Else
Range("B1").Value = res
Range("C1").Value = Application.VLookup(Target, _
rng, 3, False)
End If
End If
End Sub

This code only targets cell A1 on the current worksheet. I need it

to
target about 100 rows of column A so if the data entered in cell A55

is
different than the data entered in cell A1, it returns the proper

info
for
data entered in A55.

I've tried using several Target.Range codes, to no avail.

Any help would greatly be appreciated.

--

Dave Peterson


--

Dave Peterson





All times are GMT +1. The time now is 09:06 AM.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
ExcelBanter.com