The heads-up for a rejected edit attempt (IEditable.startEdit returning false). Returns the
callback a host invokes on each rejection, with the cell it tried to edit. Three reasons are told
apart:
A password-gated unlocked range — Excel's "Unlock Range": the password is asked for right
there, and on a match the edit is re-attempted (retry), so typing into the cell is the way to
unlock it. Shown every time, since each refusal is a concrete action to answer.
Protected sheet — Excel-style, shown once per visit to sheet (Excel re-warns each time
you come (back) to a tab, so the once-flag resets on a sheet identity change and naturally on
remount).
Part of an array-entered block — "You can't change part of an array", shown every time: the
edit opens only when the whole block is selected.
Any other non-editable reason stays silent.
One instance should serve one visit scope — SheetElement creates it and threads the callback to
every consumer it hosts (its imperative startEdit and each pane's editor layer), so four frozen
panes never warn four times.
The heads-up for a rejected edit attempt (
IEditable.startEditreturningfalse). Returns the callback a host invokes on each rejection, with the cell it tried to edit. Three reasons are told apart:retry), so typing into the cell is the way to unlock it. Shown every time, since each refusal is a concrete action to answer.sheet(Excel re-warns each time you come (back) to a tab, so the once-flag resets on asheetidentity change and naturally on remount).Any other non-editable reason stays silent.
One instance should serve one visit scope —
SheetElementcreates it and threads the callback to every consumer it hosts (its imperativestartEditand each pane's editor layer), so four frozen panes never warn four times.