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.Forecolourpode usarSETF(GetRef(FillForegnd),INDEX(...)). Isso forçará um valor emFillForegnde 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.Xadicional pode ser criada. OSETFna resposta 1 seriaGetRef(User.X).FillForegndconteriaGuard(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á oGUARDconforme 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.