As pessoas boas nos fóruns visguy forneceram insight suficiente para resolver a questão que coloquei aqui.
A propriedade User.Forecolour
usou uma fórmula ( INDEX(...)
) para determinar o valor de cor desejado. Esse uso de fórmula não ficou bem com a célula FillForegnd
.
Existem três soluções simples. Ambas as soluções usam SETF(...)
em vez de ter FillForegnd apontando para uma fórmula.
- A propriedade
User.Forecolour
pode usarSETF(GetRef(FillForegnd),INDEX(...))
. Isso forçará um valor emFillForegnd
e será a modificação mais fácil para o código original. Uma desvantagem é que qualquer modificação do usuário na própria forma sobrescreverá a célulaFillForegnd
, que não será corrigida até que o usuário selecione os dados de forma corretos novamente. - Uma célula
User.X
adicional pode ser criada. OSETF
na resposta 1 seriaGetRef(User.X)
.FillForegnd
conteriaGuard(User.X)
. Isso impedirá que os usuários alterem aleatoriamente as cores. - A terceira opção estende as respostas anteriores. Em
User.ForeColour
:=SETF(GetRef(FillForegnd),"GUARD(INDEX(...))")
. Isso definirá oGUARD
conforme necessário na área de cor do primeiro plano.
Todas essas soluções aproveitam a característica que SETF
pode sobrescrever células que têm GUARD
, mas a intervenção normal do usuário na GUI (área de página de formas) não pode.