A veeeeeerrrrr...
Tienes como condición del query :
Cita: Where A.respuesta = '"& j &"'
and A.Idpregunta = "& i &"
and B.Punpreg = "& j &"
and C.Idpregunta = "& i &"
Y tienes un FOR de 1 a 4, o sea que la variable "J"
jamás valdrá más de 4 dentro del ciclo, ¿estamos de acuerdo?
Y te preguntas por qué no deja de cumplirse la condición
If (DBresp("Punpreg") < 5), pues por que así lo programaste.
No analicé a profundidad el código, pero eso es lo que veo a golpe de vista.
Saludos