Hallo Ronny,
ehrlich gesagt kann ich mir nicht so recht vorstellen, dass deine Subs funktionieren. Mal abgesehen davon, dass dein Programm absolut nichts anderes machen kann, weil immer wieder die Waitkey() kommen.
Angenommen, ein Zeichen wird nicht richtig eingelesen, dann kommt das Programm hier nicht mehr raus:
M1:
Cc = Waitkey()
If Cc <> Mid(s , Ii , 1) Then
Goto M1
Bis dann irgendwann später doch mal zufällig das eingelesene Zeichen eines späteren GPS Satzes mit der aktuellen Position in S übereinstimmt.

Wie oben schon geschrieben, geht das mit dem URXC Interrupt viel sicherer und der µC ist nicht blockiert.
Dazu würde ich alle Zeichen einlesen bis ein CR auftauscht. Dann ist ein Satz komplett eingelesen.
Nun kannst du diesen in der Main Loop analysieren. Also etwa so:

Code:
Dim Gps_string As String * 100
Dim Gps_string_ovly(100) As Byte At Gps_string Overlay
Dim Gps_words(15) as String * 12
Dim Gps_pos As Byte
Dim GPS_complete As Byte
On URXC Urxc_isr     'kommentiere die Config Serialin Zeile aus
Enable URXC
Open "COMB.0:115200,8,N,1" For Output As #1 
Enable Interrupts

Do
   If Gps_complete = 1 Then
      Gps_complete = 0
      Word_count=Split(Gps_string, Gps_words(1), ",")    'Jetzt hast du alle Wörter in einem Array
      'hier kommt die Auswertung hin
   End If
Loop

End

Urxc_isr:
   Gps_string_ovly(Gps_pos)=UDR
   If Gps_string_ovly(Gps_pos) = 13 Then          'ASCII Wert von Carriage Return
      Gps_string_ovly(Gps_pos) = 0                   'String Ende setzen
      GPS_complete = 1
   End If
Return
Da sind jetzt vielleicht einige Sachen drin, die du nicht verstehst, aber das kommt schon noch.