Añado lo que se me ha ocurrido de código hasta el momento, no gran cosa como veis.
Código:
Private Sub vScroll_Change()
Dim x As Long
If (vScroll.Value) Then
x = (fraFrame.Height / (vScroll.Max)) * (vScroll.Value)
fraFrame.Top = x - (x * 2)
Else
fraFrame.Top = 120
End If
End Sub
No hay mucho que explicar pero aprovecho para decir que no funciona bien. En teoría, dividiendo el alto de mi frame entre el máximo valor que puede tener el vscroll conseguiría las "porciones" del frame (que viene a ser la ventana completa, por lo que dije antes), y multplicando esta porción por el value actual, nos desplazaríamos hasta la zona concreta, si el máximo valor es 5 y estamos en el value 2, nos encontraríamos a la mitad exacta de la ventana (todo esto no es cierto ya que no me funciona, era mi hipótesis).
Sin embargo cuando llego al valor máximo del vScroll, me encuentro "pasado", no me quedo corto si no que el top del frame es más negativo de lo que debería ser. Uso fraFrame.Top = x - (x * 2) porque es mi manera "casera" de volver negativo el número.
Ojalá alguien pueda darme la clave de todo esto...