Casualmente estaba leyendo esto y lo que esta al final es practicamente lo que queria explicar:
Coding standards ( donde dice:
Error handling ).
Hablemos con un ejemplo:
If Text7.text = "" Or Text7.text = "Escriba aqui el concepto de la partida" Then
MsgBox "Error por favor introduzca un concepto para la partida", vbCritical
c = 0
Else
...
Que pasa despues de eso?, nada, por que lo que esta en el "else" no se ejecuta, y despues esta la comprobación de "if c = 1 then..." que tampoco se cumple y luego termina el proceso.
Por casos asi te digo lo de "exit sub", que lo anterior quedaría asi:
If Text7.text = vbNullString Or Text7.text = "Escriba aqui el concepto de la partida" Then
MsgBox "Error por favor introduzca un concepto para la partida", vbCritical
Exit Sub
End If
Empezando por ahi ya te evitas el primer "else". Y luego en otras partes como: "If Combo1.text = "Compras" And c = 1 Then" te podes evitar el "And c = 1" puesto que sabes que si paso el exit sub anterior, entonces "c" por fuerza tiene que ser "1".
En fin, te lo digo porque si no cada vez se te va a complicar mas y mas el codigo innecesariamente y luego es que surgen las confusiones y los problemas.