Omit the 0 in the DMax arguments. You probably don't get back anything useful, or you always get back a null, right?
Jimmy, here's the straight skivvy. THERE IS NO SINGLE FIELD that does what you said you wanted to do. A field with a number, in order to increment, has to be numeric. A field with a text prefix cannot be incremented because it isn't a number. So CPU000001 (3 x text, rest numeric) cannot exist as a field. But... with an appropriate format statement for the numeric part, and the & operator, you can BUILD that identifier out of two parts. And the two parts can also participate in a compound key.
When you ask for a text ID that increments, that creature is not part of the Access menagerie.
You say you know about VBA at least somewhat.
Suppose you have this VBA declaration:
Dim PartNum as String
PartNum = "CPU00001"
PartNum = PartNum + 1
What happens? You get a mixed mode error. Why? 'cause strings and numbers don't have the same properties.
Well, asking for a single field to have those properties is the same thing. That dog just won't hunt.
Rule of thumb: If you can't do it to a variable in VBA, you probably can't do it to a field using SQL techniques either. (Some exceptions exist, since VBA has a pointer type variable.)