diff --git a/dlls/jscript/dispex.c b/dlls/jscript/dispex.c
index cdfbf9f57e46685beacf6d96f5e4b1da49745317..5b41f2702c64e9cf4dc711aaebcc8c0a7195570f 100644
--- a/dlls/jscript/dispex.c
+++ b/dlls/jscript/dispex.c
@@ -1974,7 +1974,8 @@ static HRESULT disp_invoke(script_ctx_t *ctx, IDispatch *disp, DISPID id, WORD f
 
     if(hres == DISP_E_EXCEPTION) {
         TRACE("DISP_E_EXCEPTION: %08x %s %s\n", ei.scode, debugstr_w(ei.bstrSource), debugstr_w(ei.bstrDescription));
-        hres = SUCCEEDED(ei.scode) ? E_FAIL : ei.scode;
+        reset_ei(ctx->ei);
+        ctx->ei->error = (SUCCEEDED(ei.scode) || ei.scode == DISP_E_EXCEPTION) ? E_FAIL : ei.scode;
         SysFreeString(ei.bstrSource);
         SysFreeString(ei.bstrDescription);
         SysFreeString(ei.bstrHelpFile);