Você deverá usar uma variável em nível de módulo para guardar a posição da primeira ocorrência de sua pesquisa. Numa próxima passada, você deverá começar desta posição. Pelo seu código você está pesquisando um vetor, então esta variável guardará o índice do subscrito em que você localizou o que foi pedido. P.Ex.
Dim UltOcorrencia as Integer <-- Esta variável guardará a última ocorrência do seu texto
Function BuscaInfo() As String
Dim ARR As Variant
Dim Total As Long
Dim i As Integer
Dim Linha As String
Dim Inicia As Integer
Dim Final As Integer
Linha = txtlinha.Text ' Guardar o Valor digitado na Caixa Linha.
Inicia = Val(txtPosInicial.Text) ' Guardar o Valor digitado na Caixa Posição Inicial.
Final = Val(txtPosFinal.Text + 1) ' Guardar o Valor digitado na Caixa Posição Final.
ARR = Split(txtbloco, vbCrLf)
txtMostra.Text = BuscaInfo
For i = UltOcorrencia To UBound(ARR) <-- Agora i começa em UltOcorrencia
If Left$(ARR(i), Len(Linha)) = Linha Then
UltOcorrencia = i + 1 <-- Agora UltOcorrencia armazena i+1
Exit For
End If
Total = Total + Len(ARR(i)) + 2
Next i
Total = Total + Inicia - 1
txtbloco.SelStart = Total
txtbloco.SelLength = Final - Inicia
txtbloco.Refresh
txtbloco.SetFocus
txtMostra.Text = txtbloco.SelText
End Function
Na primeira passada, sua variável estará com Zero, portanto iniciará no primeiro item do vetor, quando encontrar, passará este índice para UltOcorrência. QUando o usuário chamar novamente, a variável i começará em UltOcorrencia + 1, ou seja o próximo subscrito depois do último encontrado. Você somente deverá se preocupar quando o usuário alterar a string de pesquisa, em que você deverá lembrar de zerar UltOcorrencia.