CLng will throw an error if the input, (ComboBox4) contains a non numerical character.

Try
n = sh.Range("A:A").Find(Me.ComboBox4).Row
BTW, the Hashmark symbol, (#,) will insert VBA Code brackets around your code

Hint for newbies: your code will be more self documented if you name your Form Controls similar to the Data Sheet's Headers.
Example: Column A header = Order_number. Control ComboBox4.Name = cmboOrder_Number... You can use a UserDefinedType where colOrder_Number = 1... and the variable n is named RecordRow

Private Type DataMaster_Columns
   colOrder_Number = 1
   colNextHeader1 'Generic
   colNextHeader2 'Generic
   colOrderDate   
   colEtc
End Type
Revised code example:
RecordRow = .Columns(colOrder_Number).Find(Me.CmboOrder_Number).Row
With sh. Rows(RecordRow)
   Me.txbxNextHeader1 = .Cells(colNextHeader1) 'Generic
   Me.txbxNextHeader2 = .Cells(colNextHeader2) 'Generic
   Me.dpkrOrder_Date = .Cells(colOrderDate)
   Me.obutEmail = .Cells(colCustomerContactType) = "eMail"
   Me.obutPhone = .Cells(colCustomerContactType) = ""Phone""
   Me.obutCustomer_Thermometer = .Cells(colCustomerContactType) = "Customer Thermometer"
   etc
End With
Note this means a lot of CopyPasta (no Typos) and three or four character editing. I usually start by copying the Headers, then PasteSpecial.Transpose into a column on a new sheet. From there I C&P to name all the Form Controls. Then I will place "col" into the preceding Sheet Column and use "=A&B" in the next column and fill down both. Copying that column values gives me the variables for the UserDefined Type.

The act of copying a header name from that vertical list, then switching back to my UserForm means that I don't forget a required Control, as well as preventing typos.

This system is mostly so I never have to think (have a brain fart) about which Range which Control uses.