I think the problem is the search field for the pronum thinks its trying to write to the table when in fact it is only trying to search and retrieve the pronum associated with the table. and it;s raising the error.
No. The Pronum text box and the Invoice Number combo box are both unbound. They cannot write values to any table. Something else is happening on the form while you're working in it that is changing data, and that new data does not meet the requirements defined by your application, so the record cannot be saved. Something you're doing is causing a duplicate Primary Key value, which is not allowed. That is the reason the Me.Dirty = False is highlighted in the Debug, because it cannot save the record. I didn't spend time trying to duplicate the error, but it's not because of the unbound controls. It could have something to do with the way you have your Shipment subform set up. You have it based on a query joining the Invoice table and the ShipInfo table. The only table you should need here is the ShipInfo table and you let the Master/Child link of the subform control handle the insertion of the Foreign Key (in this case txtINVOICENUM). I would correct that first then test to see if you still are getting the error. While you are testing I would temporarliy add a text box on the main form bound to the PK field of the Invoice table (idxINVOICEID) so you can see it, then carefully step through your normal actions while in the form so you can see what's happening.
I also added a refresh button to clear the fields between searchs.
This is a mistake. This is a bound form, so when you "clear the fields" (at least the way you are doing it) you are actually overwriting the data in the current record for those fields. This would be fine if all your were "clearing" were the unbound controls, but that's not what you're doing. You are overwriting data in bound controls with a zero length string (""), essentially deleting that data.