I'm not Frank or Debra (author of the code that Frank posted).
But my guess is that some people use offset/match for its "generalism". If the
columns moved around so that the key column was to the right, then it would be
an easier tweak to change.
You'd have to do something more with =vlookup().
(but if you're designing the code and the worksheet, then I think it's pretty
much personal preference--unless you're returning lots of values from that row.
Find the matching row once and use it in the index() functions as many times as
you want.)
===
The "Application.EnableEvents = False" line doesn't actually make the
offset/match function work. It just tells excel to stop looking for changes in
the worksheet when the macro is making the change.
If you comment out that line and put a break point in on:
If Target.Cells.Count > 1 Then Exit Sub
You can watch the code while it runs.
You'll see that with "application.enableevents = false", you can make a change
using the data|validation dropdown and the new value is put into the cell.
But as soon as the new value (w/o the code number) is put into the cell, excel
says: "Hey, the sheet just changed--fire the worksheet_change event.
This time through, the value of the cell is "bookshelf" -- not "Bookshelf -- ID#
89307", so there's not a match in column B (.range("prodlist").
Then the application.worksheetfunction.match() bombs out and cause the code to
break.
But with "application.enableevents = false", excel just won't be watching for
changes. And the worksheet_event doesn't fire a second time (and so the blow up
is avoided).