Zweig mit mehr als sechs Ästen

In der letzten Visio-Schulung beschwerte sich ein Teilnehmer über das Shape „Zweige schräg“. Dort könne man nur bis zu sechs Zweige herausziehen. Er benötigt allerdings acht Linien.
Kein Problem: Im ShapeSheet muss man nur zwei weitere Zeilen für die Controls (die gelben Steuerelemente) einfügen und die Formeln von oben nach unten kopieren.
Außerdem muss man zwei neue Abschnitte einfügen; den Zeilentyp auf MoveTo und LineTo ändern. Bei beiden Abschnitten wird jeweils eine neue Zeile eingefügt. Die Formeln können von Abschnitt Geometrie7 nach geometrie8 und Geometrie9 kopiert werden. Die Formeln müssen angepasst werden – so wird beispielsweise aus:
Width+ABS(Controls.Row_6.Y-Height/2)/Scratch.A1
die neue Formel:
Width+ABS(Controls.Row_7.Y-Height/2)/Scratch.A1
bzw.
Width+ABS(Controls.Row_8.Y-Height/2)/Scratch.A1
Ein Test – und fertig ist der neue Zweig. Er kann in einer Schablone gespeichert werden.

Multishape

Das Bodenshape und das Shape „Schuss“
===================================
Und so habe ich das Shape erstellt:
Ich ziehe die sieben Shapes auf das Zeichenblatt und sehe sie mir an:

Es fällt auf, dass einige der Shapes gruppiert sind. Da es schwierig ist eine Gruppe auszublenden (weil das Gruppenshape auf den einzelnen Shapes liegen und die Gruppe selbst keine Linie und Füllung hat). Also hebe ich so lange die Gruppen auf, bis die Shapes „flach“ sind:

Da ich nun einzelne Shapes habe, werden sie über Entwicklertools / Vorgänge / Verbinden zu einem Shape verbunden.
Die sieben Shapes werden mit Ausrichten ([F8]) übereinander gelegt und erneut gruppiert.
Im ShapeSheet der Gruppe füge ich einen Abschnitt „userdefinied cell“ ein. Die Zeile heißt „Boden“.
Ich fügen einen Abschnitt „Action“ ein, der sieben Zeilen erhält (Einfügen / Zeilen). Die Menüs lauten: =“Füllkörper unregelmäßig“, =“Kaskadeneinbauten“, =“Füllkörper regelmäßig“, … In den Actions baue ich die Formel ein:
SETF(„User.Boden“,1)
SETF(„User.Boden“,2)
SETF(„User.Boden“,3) usw.
Das heißt: in die Zelle User.Boden wird der Wert 1 oder 2 oder 3 … hineingeschrieben – je nachdem, welcher Eintrag im Kontextmenü ausgewählt wurde. Schließlich wird noch in der Spalte Checked die Formel =User.Boden=1 oder =User.Boden=2 oder =User.Boden=3 … eingetragen. Das heißt: steht in der Zelle User.Boden der Wert 1, dann liefert =User.Boden=1 den Wert True. Die Folge: der Haken wird gesetzt.

Ich sehe unter Entwicklertools / Shapename nach, wie das Shape heißt – hier: Sheet.548. Die Gruppe wird geöffnet (über das Kontextmenü). Achtung: nicht Gruppe aufheben – denn an der Gruppe steckt ja das selbstgebaute Kontextmenü:

Die einzelnen Mitglieder der Gruppe werden markiert. Das ShapeSheet wird angezeigt. Dort wird nun in die Zelle NoShow im Geometrieabschnitt eingetragen:
Sheet.548!User.Boden<>6
Das heißt: wenn in der Zelle User.Boden der Gruppe NICHT der Wert 6 (hier: Glockenboden) steht, liefert die Formel Sheet.548!User.Boden<>6 den Wert True und NoShow = True bedeutet: dieses Shape wird nicht angezeigt.

Das muss man für alle sieben Mitgliedsshapes machen. Achtung: einige der Shapes haben mehrere Geometrieabschnitte – man muss in jedem Abschnitt diese Formel eintragen.
Das Shape ist fertig – in Visio kann man über Entwicklertools / Verhalten einschalten: „Nur Gruppe“, damit der Anwender nicht fälschlicherweise in die Gruppe hineinklickt.

Dieses Shape habe ich in den Schuss eingebaut. Ich habe den Schuss aus der Schablone gezogen, die Gruppierung aufgehoben. Erneut gruppiert. Nun heißt die Gruppe „Sheet.100“ und nicht „Schuss mit EBH (Packung)“ – die Leerzeichen und die Sonderzeichen sind unglücklich. An die Gruppe füge ich die Daten an, wobei die Liste der Füllung die gleiche Reihenfolge hat, wie mein Boden-Shape:
leer;Füllkörper unregelm.;Kaskade;Füllkörper regelm.;Siebboden;Ventilboden;Glockenboden;Packung

Das Shape erhält im ShapeSheet zwei benutzerdefinierte Zellen:
User.Boden und User.Bodennummer
In User.Boden wird der ausgewählte Text der Shapedaten wiederholt:
=FIND(Prop.Füllung,Prop.Füllung.Format)
In User.Bodennummer wird die Nummer des Eintrags bestimmt – ich suche also die Position des Textes in der Liste:
=IF(User.Boden=1,0,IF(User.Boden=6,1,IF(User.Boden=27,2,IF(User.Boden=35,3,IF(User.Boden=54,4,IF(User.Boden=64,5,IF(User.Boden=76,6,7)))))))
Diese Formel liefert 0 bei „leer“, 1, bei „Füllkörper unregelm.“, 2 bei „Kaskade“ usw.
Das Bodenshape wird in die Gruppe eingefügt. Dort verweist nun die Zelle User.Boden des inneren Shapes auf die Zelle des äußeren Gruppenshapes.
=Sheet.100!User.BodenNummer
Die Gruppe kann über Verhalten geschützt werden.

Das fertige Shape:

Ein weiterer Bug – im ShapeSheet

Eigentlich mag ich Visio sehr gerne. Cleveres Programm! Allerdings finde ich in der Version 2016 leider sehr viele Bugs. Beispielsweise folgender:
Ich nehme Bezug im ShapeSheet auf eine Zelle des Abschnitts „Daten“. Beispielsweise so:
=User.Dateinummer&“-„&Prop.ShapeNumber
Ich ändere den Wert der Zelle, auf den Bezug genommen wird. Visio löscht mir die Zeilen. So kann ich nicht arbeiten. Damit ist eine Modifikation des Assistenten „Shapes nummerieren“ hinfällig. Schade!

PinX und LocPinX

Gestern habe eine Visio-Zeichnung, aus der ich Informationen per Programmierung auslese, zurückgeschickt bekommen. Einige Informationen werden nicht gefunden, war der Vorwurf. Der Grund war schnell gefunden.
Der „Nachbarrtisch“ wurde nicht gefunden, weil ich davon ausgehe, dass der Pin sich immer in Mitte-Mitte des Shapes befindet. Wenn allerdings der Anwender (aus Versehen) den Pin verschiebt, so stimmen meine Programmierresultate nicht mehr.
Ich könnte nun die Position des LocPinX und LocPinY berechnen. Ich tendiere dazu in den Shapes die Funktion =Width*0.5 und Height*0.5 mit der Funktion GUARD zu sperren.

Pfeilrichtung

Ich lese per Programmierung die Laufrichtung von Gängen von Visio-Zeichnungen aus. Ich stutze, weil das Ergebnis nicht korrekt ist. Schaue mir die Zeichnungen genauer an: Warum zeigen einige Pfeile mit einem Winkel 90° nach links, während andere Pfeile mit dem Winkel -90° auch nach links zeigen? Die Lösung ist schnell gefunden: einige Pfeile wurden gespiegelt. Also muss man neben dem Winkel auch noch FlipY überprüfen. Dann findet man die Pfeilrichtung.

Gruppenschutz

Ich verwende diesen Pararmeter gerne und häufig in Visio.
Sicherlich ist Ihnen schon bei vielen Shapes aufgefallen, dass ein Schutz auf Ihnen liegt – das Aufheben der Gruppierung ist nicht möglich. Ein Blick in Entwicklertools / Shape-Design / Schutz hilft auch nicht weiter.
Der Schutz liegt eine Ebene tiefer: im ShapeSheet im Abschnitt „Protection“ wurde der Wert der Zelle „LockGroup“ auf 1 (True) gesetzt. So kann der Anwender nicht mehr versehentlich die Gruppierung aufheben ([Shift] + [Strg] + [U]).
Ich schalten diesen Schutzmechanismus gerne bei Shapes ein, die ich an Firmen ausliefere – ein kleiner Schutz.

Der Nummerierungsassistent

Amüsantes Problem, das letzte Woche in der Visio-Schulung aufgetreten ist:
Einer Firma arbeitet in Visio mit dem Nummerierungsassistenten. Die Nummer soll aber nicht im Shape sondern außerhalb angezeigt werden. Hierfür würde ein weiteres Shape angelegt, das die Nummer des ersten Shapes „zieht“, beispielsweise über:
=Sheet.1!Prop.ShapeNumber
Diese Nummer in den Shapedaten kann man nun anzeigen lassen.
Beide Shapes werden gruppiert, was allerdings zur Folge hat, dass sich der Verbindungspunkt nicht mehr in der Mitte des Shapes befindet, was man leicht feststellt, wenn man eine Verbindungslinie zieht.
Die Frage war: Wie bekommt man die Gruppe verkleinert?
Die Lösung: Man schiebt das „Nummernshape“ in das große Shape.
Anschließend legt man ein weiteres Shape auf die Gruppe, das man „zur Gruppe hinzufügt“ (Start / Anordnen / Gruppieren).
Nun kann man das „Hilfsshape“ wieder löschen und das Nummernshape zurückziehen.
Dann funktioniert das Verbinden.
Tipp: Wenn die Nummer nicht im Shape, also nicht auf der Gruppe erscheinen soll, schalten Sie beim Nummerieren die Option „Shape-Nummern ausblenden“ ein (zweite Registerkarte: „Weitere Optionen“)

Symmetrisches Shape

Hallo Herr Martin,
Das Zentrum des Shapes soll seine y-Koordinaten nicht verändern, nur die Linien sollen sich (symmetrisch?) verlängern und die Texte auf Höhe der Dreiecke bleiben. Wie mache ich so etwas?
Hallo Herr M.,
Die Antwort zu Ihrem Supply Limit: es gibt keine Taste, um die Höhe (oder Breite) symmetrisch zum Pin zu ändern. Man könnte es über das Fenster Ansicht / Größe und Position machen – umständlich!

Ich schlage ein bisschen ShapeSheet vor: Fügen Sie einen Controlpunkt ein und beziehen die beiden Labels, die beiden Dreiecke und die beiden Enden der Linie auf diesen Punkt.

Sie finden meine Lösung unten links in dem roten Kasten. Hilft das?

Ein Ventil

Heute fragte eine Teilnehmerin in der Visio-Schulung, wie man es machen kann, dass beim Vergrößern eines Ventils nur das „T“ wächst. Die Antwort: man muss einige relative Verweise durch absolute Zahlen ersetzen – dann wird weder das „N“ vergrößert noch ändert sich die Unterkante des „T“.

 

Hintergrund- und Vordergrund

Guten Tag Herr Martin,
Ich habe ihre Videos auf Video2Brain gesehen und angefangen mit Visio zu basteln. Ist es möglich im ShapeSheet des Zeichenblattes eine Referenz zu dem X Wert des Hintergrundes herzustellen?
Ziel ist es, dass das Hintergrundblatt ,bei Änderung von Hoch- in Querformat, sich automatisch anpasst.
Ich würde mich über eine Antwort freuen.

Mit freundlichen Grüßen FK.


Hallo Herr K.,
ja – verweisen Sie vom Hintergrundblatt auf das Vordergrundblatt, indem Sie bei PageWidth eintragen:
=Pages[Page-1]!ThePage!PageWidth
Analog bei PageHeight:
=Pages[Page-1]!ThePage!PageHeight
Und: dann sollten Sie Shapes die Hintergrundblattes auf die Größe verweisen lassen – also das Logo sitzt beispielsweise bei:
ThePage!PageWidth-10 mm
und bei
ThePage!PageHeight-10 mm
wenn die beiden LocPinX und LocPinY bei:
Width*1
und bei
Height*1 sitzen.