diff --git a/dlls/mshtml/olecmd.c b/dlls/mshtml/olecmd.c
index 468c401fce0..8c4b8cf3b03 100644
--- a/dlls/mshtml/olecmd.c
+++ b/dlls/mshtml/olecmd.c
@@ -523,6 +523,9 @@ static HRESULT exec_editmode(HTMLDocument *This, DWORD cmdexecopt, VARIANT *in,
if(in || out)
FIXME("unsupported args\n");
+ if(This->usermode == EDITMODE)
+ return S_OK;
+
This->usermode = EDITMODE;
if(This->frame)
diff --git a/dlls/mshtml/tests/htmldoc.c b/dlls/mshtml/tests/htmldoc.c
index 2627a8570c2..083181afd31 100644
--- a/dlls/mshtml/tests/htmldoc.c
+++ b/dlls/mshtml/tests/htmldoc.c
@@ -2571,6 +2571,10 @@ static void test_exec_editmode(IUnknown *unk)
IOleCommandTarget_Release(cmdtrg);
editmode = TRUE;
+
+ hres = IOleCommandTarget_Exec(cmdtrg, &CGID_MSHTML, IDM_EDITMODE,
+ OLECMDEXECOPT_DODEFAULT, NULL, NULL);
+ ok(hres == S_OK, "Exec failed: %08x\n", hres);
}
static HWND create_container_window(void)