| Previous | Next |
| OLEOBJ_E_INVALIDVERB | INPLACE_E_NOTOOLSPACE |
INPLACE_E_NOTUNDOABLE
Undo is not available
INPLACE_E_NOTUNDOABLE is the failure HRESULT 2147746208 (0x800401A0, signed -2147221088) from winerror.h. AllStat defines it as “Undo is not available”. In practical terms, the requested in-place operation cannot participate in the expected undo transaction. Interpret it in the context of coordinating in-place object editing with container undo support.
The high bit in 0x800401A0 is set, so this is a failure rather than a success or informational result. Its facility field is 4 (FACILITY_ITF) and its low 16-bit code is 416 (0x01A0). Those bit fields classify the value, but they do not identify the failing object by themselves; the native method, object identity, and first producer of INPLACE_E_NOTUNDOABLE remain essential.
Contract boundary
Understanding INPLACE_E_NOTUNDOABLE requires this subsystem context: In-place activation is a negotiation between the object, client site, frame, and document window. For INPLACE_E_NOTUNDOABLE, undo capability and border space are independent resources and need distinct recovery paths.
- Associate
INPLACE_E_NOTUNDOABLEwith one exact operation in IOleInPlaceObject, IOleInPlaceSite, active-object negotiation, undo state, border space, and tool-window layout. - Confirm that
INPLACE_E_NOTUNDOABLEcame from coordinating in-place object editing with container undo support, rather than from cleanup or a wrapper that ran afterward. - Preserve any IErrorInfo, underlying Win32 result, provider message, or callback failure that preceded
INPLACE_E_NOTUNDOABLE; the HRESULT alone should not erase a more specific cause.
Likely cause branches
INPLACE_E_NOTUNDOABLEcan result when the object has already committed a change that cannot be reversed.INPLACE_E_NOTUNDOABLEcan result when the container requests undo after deactivation or transaction disposal.INPLACE_E_NOTUNDOABLEcan result when the server never offered an undoable unit for this operation.
Evidence to preserve
A useful INPLACE_E_NOTUNDOABLE incident records the in-place activation phase, active object, container and object rectangles, border widths, frame and document windows, undo transaction state, and UI deactivation sequence. For INPLACE_E_NOTUNDOABLE, also retain the application and component build, architecture, process and thread IDs, COM apartment, operation correlation ID, elapsed time, and the first state-changing event before the failure. When logging INPLACE_E_NOTUNDOABLE, redact content and credentials while preserving types, lengths, hashes, opaque identities, and lifecycle generations needed to reproduce its contract.
- For
INPLACE_E_NOTUNDOABLE, record the edit transaction ID and object activation lifecycle. - For
INPLACE_E_NOTUNDOABLE, capture when the container enabled its Undo command and which interface promised it. - For
INPLACE_E_NOTUNDOABLE, distinguish inability to undo from failure performing a supported undo.
Diagnostic sequence
- Capture
INPLACE_E_NOTUNDOABLEat the first native return before a wrapper maps it to a generic exception. - Identify the exact object, method, and lifecycle phase involved in coordinating in-place object editing with container undo support.
- Record the edit transaction ID and object activation lifecycle.
- Capture when the container enabled its Undo command and which interface promised it.
- Distinguish inability to undo from failure performing a supported undo.
- Reproduce
INPLACE_E_NOTUNDOABLEwith one controlled input or state change, and verify that the correction changes the decisive evidence rather than merely hiding the result.
Recovery and retry
Correction. For INPLACE_E_NOTUNDOABLE, disable the undo command for that operation, preserve document dirty state, and offer a higher-level reload or revert only when safe. Retry boundary. Retrying the same undo is inappropriate unless the object returns to a prior transaction state. Before repeating the INPLACE_E_NOTUNDOABLE operation, deactivate any partially active object, restore frame and document-window border space, and close or commit the current undo unit consistently.
Practical scenario
An embedded chart applies an external data refresh that cannot be reversed; the host marks the document modified and disables only that undo entry. This isolates INPLACE_E_NOTUNDOABLE within OLE in-place activation and container coordination and provides a regression test for the stated correction.
Difference from related HRESULTs
OLE_E_PROMPTSAVECANCELLED concerns a save decision; INPLACE_E_NOTUNDOABLE specifically says the active edit lacks a reversible unit. For INPLACE_E_NOTUNDOABLE, keep those outcomes separate in exception mappings, telemetry dimensions, user messages, and automated retry policy.
Developer and administrator guidance
For INPLACE_E_NOTUNDOABLE, model activation, UI activation, border negotiation, and undo as separate states, and balance every site or frame callback even when a later phase fails. Regression coverage for INPLACE_E_NOTUNDOABLE should include objects without undo, zero and insufficient border space, tool-window changes, nested activation, frame destruction, and failure during UI deactivation.
Operational repair for INPLACE_E_NOTUNDOABLE must target the evidence-backed owner: compare the object server in a known compatible container; layout or undo contract failures should not be treated as generic COM-registration damage. Retain before-and-after traces for INPLACE_E_NOTUNDOABLE so the change can be attributed and reversed.
References
- Microsoft: generic COM error codes — official Microsoft documentation relevant to
INPLACE_E_NOTUNDOABLE. - Microsoft: HRESULT values — official Microsoft documentation relevant to
INPLACE_E_NOTUNDOABLE. - Microsoft: IOleInPlaceObject — official Microsoft documentation relevant to
INPLACE_E_NOTUNDOABLE. - Microsoft: IOleInPlaceSite — official Microsoft documentation relevant to
INPLACE_E_NOTUNDOABLE.
Looking for a different code? Search another status or error code.