once you put letters in a number you no longer have a number - you now have a string, which access tries to sort in an ALPHABETIC way, rather than a NUMERIC way.
hence
EH1
EH10
EH2
is a "dictionary order", but this is not what you want
to sort in number order you either need
a) to ensure all strings are the same length, then you get
EH01
EH02
EH10
and your sort works ok OR
b) find a way of extracting the number as a temporary field, and sort on that
so you get
1 (EH1)
2 (EH2)
10 (EH10)
which also works ok
unfortunately this last bit is slightly harder to do. Access has a "val" function to change a string into a number, but unfortunately it doesnt extract the numbers in quite the way you need (look at help to see what it does). Hence all the advice here is based on ways of manipulating your string to try and extract the number bit.
I hope this helps you understand exactly what is going on
-------
its another reason why data analysis and normalisation is so important (this isnt really a normalisation issue, but its similar in concept). In your case its probably just a discussion point, as its probably too late to change now, but it does mean that even a product code structure should be carefully considered before implementation.