Fíjate que tanto en VisualizarPacienteDiagnosticos como en VisualizarPacientes estás volviendo a abrir el recordset. Cada vez que haces un "Set recbd = New ADODB.Recordset" estás creando uno nuevo y asignándolo a la variable "recbd", machacando cualquier dato que tuviera antes. Por tanto cuando después de esas dos funciones vuelves a DatosDiagnostico el "recbd" que usas ya no tiene nada que ver con el que has usado en cmddiagnostico_Click, y por eso los botones no te funcionan.
Es lo que tienen las variables globales
Lo suyo es que uses un recordset para los pacientes y otro distinto para los diagnósticos. Requiere más memoria, pero es así como se debe programar, ya que se nota en la velocidad de ejecución, simplificas el programa, y le das un uso específico a cada variable.
Y además, le haría caso a Avellaneda, lo de la combo tampoco termino de entenderlo.