Impostando MSComm1.RThreshold = 31 fai sì che l'evento OnComm si verifichi ogni 31 caratteri ricevuti, di conseguenza sarebbe inutille estrarre i primi 31 caratteri dalla stringa RX [Mid(RX, 1, 31)].
Inoltre dovresti assicurarti che la stringa inizi e termini con i caratteri previsti, quindi ti consiglio di impostare RThreshold = 1 e di inziare ad accodare i caratteri che ricevi (uno alla volta) solo a partire dal "$" e fino a quando non ricevi CR + LF. A quel punto trasferisci la stringa da qualche altra parte e ricominci.
Tieni anche presente che l'evento OnComm si verifica per diverse cause: accertati quindi che sia stato ativato per "dati ricevuti"; c'è una proprietà (o un parametro, non ricordo) che lo specifica.
Ma la cosa più importante è che tu ti accerti che il dispositivo collegato invii dati a 4800,n,8,2. Non fidarti di Hyperterminal, consulta la documentazione della bilancia.