bueno traté de repetir tu codigo, y como suponiamos, el indice fuera de intervalo se da en :
msh.TextMatrix(y, 9)
Por que?
creo que es por que dentro del FOR se va incrementando Y, entonces la primera vez, elimina la fila 1, pero ahora ROWS ya contiene 1 fila menos, "Y" vuelve a incrementar, y llega un punto en donde por ej, si inicialmente tenia 10 filas, Y vale 10, pero ya me queda solo 1 fila en la coleccion de filas, entonces nunca voy a poder eliminar el item 10, porque ya no existe.
probalo asi, creo que funciona:
Dim i As Integer
Do While i < msh.Rows
i = i + 1
If (msh.TextMatrix(1, 9) <> "ProV1") Then
msh.RemoveItem (1)
End If
Loop