Nessuno è nato imparato... stai tranqui.

Letto così non c' è motivo per cui non dovrebbe funzionare...

Hai provato a mettere dei Debug.Print dopo Dato2, Dato23 e Risultato2 per verificare i loro valori?

Piccola nota:

ElseIf Forma <> 0 Then...

è inutile, basta un semplice Else: visto che prima dichiari If Forma = 0 va da sé che dopo sarà <> 0.