FillForegnd in Shapesheet mit falschen Daten

329
AJD

Ich habe ein arbeitsbezogenes Problem und kann daher die Beispieldatei nicht anhängen.

Ich verwende dynamische Formen als Teil eines Diagramms, in dem der Benutzer die Formdaten ändern kann (dh eine Kategorie ändern kann) und die Form ihre Farbe ändert. Die Mechanismen dafür befinden sich im ShapeSheet.

Das Schlüsselelement der Daten (Prop.Category) ist ein Index aus einer festen Liste von Optionen. Ein Benutzerfeld (User.ForeColour) verwendet die Prop.Category-Daten, um den RGB-Farbwert aus einer anderen festen Liste (einer anderen Index- / Suchformel) zu bestimmen. Ich habe FillForegnd für den direkten Zugriff auf User.ForeColour eingestellt.

In meinem Beispiel hier wählt der Benutzer Prop.Category # 3 aus, wodurch User.ForeColour indirekt auf RGB (128,0,128) gesetzt wird. In meinem aktuellen Dateisetup wird FillForegnd jedoch auf RGB (64,86,150) gesetzt. Wenn ich andere Kategorien auswähle, werden auch die FillForegnd-Werte vom erwarteten Wert geändert.

Ich habe das ShapeSheet mit der Formel- und Werteansicht überprüft. Alles ist korrekt (außer dem endgültigen Wert in FillForegnd). Wenn Sie User.ForeColour überprüfen, wird der Wert RGB (128,0,128) wie erwartet angezeigt.

Wenn ich die Formel in User.ForeColour mit dem statischen Wert RGB (128,0,128) überschreibe, ist interessanterweise FillForegnd korrekt gefüllt und die Form zeigt die richtige Farbe. Kehren Sie zur Formel zurück (die immer noch den richtigen Wert hat), und der FillForegnd wird erneut mit dem falschen RGB-Wert gefüllt.

Ich habe Themen überprüft und entfernt, dies hatte keine Auswirkungen.

Visio 2010, Vernetzte Windows 7-Umgebung.

Ich habe versucht, das Problem in einer neuen Datei auf einem anderen System zu kopieren (damit ich ein hochladbares Beispiel erhalten konnte), war jedoch nicht erfolgreich. Die Datei mit der ursprünglichen Masterform funktioniert weiterhin wie erwartet. Die neue Datei mit den kopierten Formen (und standardmäßig der kopierte Master) ist die Datei mit Problemen. Ich habe das ShapeSheet noch einmal überprüft und die Standard- / Master-Einstellungen sind wie erwartet (schwarzer Text) und die maßgeschneiderten Auswahlmöglichkeiten (blauer Text) sind wie erwartet.

0
[Aus meinem inzwischen gelöschten Cross-Post - von @JohnGoldsmith] Hallo, es ist ein bisschen schwierig zu sehen, was hier los ist. Können Sie das Problem in nicht vertraulichen Dokumenten replizieren? Wenn Sie können, würde ich Ihre Frage unter visguy.com/vgforum/index.php posten, wo Sie Dateien an Threads anhängen können. - John Goldschmied AJD vor 6 Jahren 0
Für Interessenten habe ich diese Frage unter http://visguy.com/vgforum/index.php?topic=8205.0 gepostet und werde hier eine Antwort posten, wenn ich jemals Erfolg habe. AJD vor 6 Jahren 0

1 Antwort auf die Frage

0
AJD

Das gute Volk in den visguy-Foren lieferte genügend Einsicht, um die hier gestellte Frage zu lösen.

Die User.ForecolourEigenschaft verwendete eine Formel ( INDEX(...)), um den gewünschten Farbwert zu bestimmen. Diese Verwendung der Formel passte nicht gut zur FillForegndZelle.

Es gibt drei einfache Lösungen. Beide Lösungen verwenden SETF(...)FillForegnd anstelle einer Formel.

  1. Die User.ForecolourEigenschaft kann verwenden SETF(GetRef(FillForegnd),INDEX(...)). Dadurch wird ein Wert erzwungen, FillForegndund es ist die einfachste Änderung des ursprünglichen Codes. Ein Nachteil ist, dass alle Benutzeränderungen an der Form selbst die FillForegndZelle überschreiben, die erst dann korrigiert wird, wenn der Benutzer die richtigen Formdaten erneut auswählt.
  2. Eine zusätzliche User.XZelle kann erstellt werden. Die SETFAntwort würde 1 sein GetRef(User.X). FillForegndwürde enthalten Guard(User.X). Dadurch wird verhindert, dass Benutzer die Farben zufällig ändern.
  3. Die dritte Option erweitert beide vorherigen Antworten. In User.ForeColour: =SETF(GetRef(FillForegnd),"GUARD(INDEX(...))"). Dadurch wird GUARDdie Farbe im Vordergrundfarbenbereich nach Bedarf festgelegt.

Alle diese Lösungen nutzen die Eigenschaft, SETFdie Zellen überschreiben kann, die über einen GUARDnormalen Benutzereingriff in die GUI (Seitenbereich Formen) verfügen .