Premetto che select/case non lo so usare... 
Penso che gestisci male l' evento TextChanged e il controllo sul testo che viene verificato ad ogni modifica della textbox, dovresti provvedere ad azzerare il testo dopo le msgbox, inoltre byte ha il limite di 255.
Con il codice sotto sembra funzionare...:
codice:
Private Sub TextBox1_TextChanged() Handles TextBox1.TextChanged
If TextBox1.Text = "" Then
Return
End If
If TextBox1.Text = "0" Then
MessageBox.Show("che hai zero sale.. imbecille", "", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
TextBox1.Text = ""
Return
End If
Try
sale = CByte(TextBox1.Text)
Catch ex As InvalidCastException
MsgBox("immetti un valore valido cosi andiamo avanti." & vbCrLf & "Errore:" & _
ex.Message)
TextBox1.Text = ""
Return
Catch ex As OverflowException
MsgBox("Valore non consentito. Massimo 255." & vbCrLf & "Errore:" & _
ex.Message)
TextBox1.Text = ""
Return
Catch ex As Exception
MsgBox("Errore non previsto:" & ex.Message)
TextBox1.Text = ""
Return
End Try
End Sub
NB: il codice "& vbCrLf & "Errore:" & ex.Message" una volta che conosci l' errore e lo descrivi nel testo della msgbox si può tralasciare. Io lo uso solo per identificare l' errore è immettere un testo pertinente nella msgbox tipo l' ultimo Catch.
ciao