Maßstab

Ist das schon einmal jemandem aufgefallen? Visio bietet seit der Version 2013 einen Importfilter an, mit dem dwg- und dxf-Dateien direkt geöffnet werden können. Allerdings: der Maßstab ist dann falsch. Oben: die Originalmaße der dxf-Zeichnung; unten: ein Machmessen mit Hilfe des Shapes „Bemaßung“.

Falscher Maßstab
Falscher Maßstab

Änderung des Namens

Interessant! Wenn ein Shape mit einem Hyperlink auf ein anderes Zeichenblatt verweist oder mit einem Doppelklick ein anderes Blatt anspringt, so wird beim Ändern des Namens der Hyperlink geändert. Das Doppelklickverhalten (unteres Shape) läuft jedoch ins Leere. Der Grund hierfür ist schnell gefunden: Im ShapeSheet steht in der Zelle Hyperlink:
=Pages[Page-2]!ThePage!PAGENAME()
das heißt – diese Zelle greift auf den internen Namen zu, der nicht geändert werden kann.
In der Zelle EventDblClick steht jedoch die Formel:
=GOTOPAGE(„Zeichenblatt-2“)
das bedeutet: hier wird der Name hart codiert eingetragen, so dass die Änderung des Namens zu einem Fehler führt.
Sehr erstaunlich ist auch, dass sich der Verweis, ob ein Vordergrundblatt ein Hintergrundblatt verwendet, NICHT im ShapeSheet befindet. Aber dieser Verweis wird beim Ändern des Namens auch aktualisiert.
Hyperlink hat kein Problem - Doppelklickverhalten allerdings schon.
Hyperlink hat kein Problem – Doppelklickverhalten allerdings schon.

Beschriftungsfehler

Zugegeben – ich programmiere auch und mir unterlaufen dabei auch Fehler. Auch – und gerade – bei den Beschriftungen:

Fehler20160104_1 Fehler20160104_2

Auch wenn solche Fehler nicht schlimm sind – sie sind peinlich und fordern ein Schmunzeln heraus (der obere Beschriftungsfehler war schon in Visio 2013 drin und wurde in 2016 übernommen; der untere ist in der Version 2016 hinzugekommen).

Parallellaufende Verbinderlinien

In der letzten Visio-Schulung erzählte mir ein Teilnehmer genervt, dass die parallellaufenden Verbinderlinien manchmal zur Seite springen, was er nicht möchte. Vor allem bei vielen Linien sei es schwierig äquidistante Abstände zu erzeugen. Wir überlegten zusammen und kamen zu dem Ergebnis, dass ein festes Gitter eine sehr gute Hilfe hierfür sei – werden die Verbinderlinien auf das Gitter gezogen, springen sie (fast) nicht mehr zur Seite. Und – über den festen Rasterabstand – kann man – unabhängig vom Zoom – die gleichen Abstände erzeugen. Er war zufrieden.

Die Linien laufen parallel
Die Linien laufen parallel

Ränder und Raster

Eine Frage aus der letzten Visio-Schulung, die mich für einen Moment hat stutzen lassen: Stellt man in Visio über das Startmenü in Ansicht / Anzeigen ein festes Gitter von bspw. 3 mm ein, so ist das erste Kästen links unten kleiner. Die Antwort ist schnell gefunden: Visio zeigt die ersten Rasterkästchen in der linken Ecke nicht an, wenn die Seitenränder eingeblendet sind. Die Breite der Ränder werden im Dialog Kopf- und Fußzeile angezeigt, der wiederum im Bereich Datei / Drucken versteckt ist.

Rand20160103_3 Rand20160103_1Rand20160103_2

Microsoft vergisst halt doch nichts

Zugegeben: das ist mir erst heute aufgefallen. Mit Visio 2013 wurden Effekte eingeführt. Dafür verschwand der einfache, aber praktische Schatten als Element der Füllformatierung.
Heute habe ich entdeckt, dass er natürlich nicht verschwunden ist – im ShapeSheet gibt es noch immer die Zelle ShdwPattern mit der der Schatten aktiviert werden könnte.
Microsoft vergisst halt doch nichts – es ist alles immer doch da – seit der ersten Version – oftmals einfach nur ausgeblendet.
Der "alte" Schatten ist noch da.
Der „alte“ Schatten ist noch da.

Dynamische Shapes

Hallo Herr Martin,
ich sitze heute im HomeOffice und wollte mir eine vermeintlich einfache Aufgabe stellen.
Ich möchte mir ein Shape bauen das ich als „Rahmen verwenden möchte“ Das Shape soll so aussehen.
Ich will das als Sammelplatz für andere Shapes nutzen (ähnlich einem Container)
______________________
Überschrift hat eine Zeile
______________________

______________________
Überschrift hat eine Zeile
und noch eine
______________________

______________________
Ich möchte das die Überschrift immer so Hoch ist wie der Text (Also nur der obere Kasten soll wachsen die Größe des unteren ergibt sich dadurch das ich sie durch ziehen einstelle)
Der Kasten soll nach oben wachsen und auch die Schrift soll immer nach oben verschoben werden.
Ich habe das bisher so gelöst das ich zwei Vierecke miteinander gruppiert habe. Ohne Gruppierung bekomme ich das hin aber so wie die beiden Vierecke gruppiert sind verhält sich das Kästchen Überschrift anders.
ich sehe im shapesheet das sich die Bezüge verändern aber irgendwie komme ich nicht dahinter wie ich es machen muss.
Mir ist zum Beispiel nicht klar wie ich die einzelnen Betsandteile einer Gruppe ansprechen kann. In diesem Fall vermute ich das wir 3 Elemente haben.
Das Shape der ersten Viereck, das Shape des zweiten Viereck und das Shape der Gruppe.
Es wäre toll wenn sie mir eine Visiodatei mit einem Beispiel schicken könnten. Ich habe leider ihre Unterlagen nicht zu Hause, da steht die Lösung eventuell drinn.
Danke Ihnen
Gruß AT.
Hallo Herr T.,
Gruppe ist klasse; mit einer Gruppe kommt man gut hin. Ich nehme zwei Rechtecke; gruppiere sie. Jedes der drei Shapes hat einen Namen (Develloper / Shape-Name). Bei mir: Sheet.5, Sheet.6 und Sheet.7. Bitte nicht ändern! (Kleiner bug im Shapesheet)
Ich habe den Pin des oberen Shapes auf Mitte / oben gesetzt, den Pin des unteren auf Mitte / unten (über View / Task-Pane / Size & Position)
Ich schreibe Text in das obere Shape. Die Height im Shapesheet lege ich fest: =GUARD(TEXTHEIGHT(TheText,1)) – also: Höhe so groß wie die Texthöhe.
Außerdem achte ich darauf, dass PinY auf: =Sheet.7!Height*1 liegt, also Oberkante an Oberkante.
Beim unteren Kästchen stelle ich im Shapesheet ein:
Height: =Sheet.7!Height-Sheet.5!Height
Ebenso: Unterkante an Unterkante, also: PinY: = =Sheet.7!Height*0
Okay. Ganz dolle ist es noch nicht – am Verhältnis Höhe und Breite und Schriftgröße müsste man noch arbeiten.
Hilft Ihnen das?
schöne Grüße
Rene Martin
Hallo Herr Martin,
danke für die Antwort. Ich hatte mich mühsam rangetastet und es letzten ende hinbekommen.
Ein Frage:
Visio benennt die Shapes selbst numerisch. Shape.97 etc.
Kann ich den Shapes Sinnvolle Namen geben. Beispiel:
Shape.Oberertext
Shape.Unterertext
und so weiter?
Das würde es einfacher machen wenn man darauf referenziert
Danke und Gruß
Hallo Herr T,

wenn Sie Visio programmieren, dann bemerken Sie, dass Visio innerhalb einer Datei jedem Shape eine eindeutige ID zuweist. Das ist sinnvoll. Die wird im Shapesheet nicht verwendet. Steht aber auch im Dialog Shape-Name
Darüber hinaus bekommt jedes Shape einen Namen. Den kann man ändern, um leichter darauf zugreifen zu können. Nur: Im Shapesheet wird leider der von Visio vergebene Name verlangt (ich weiß, ich weiß, ist blöde … ich habe mich auch schon geärgert).
Aber das Konzept ist wichtig, weil: Wenn Sie das Shape in eine Schablone ziehen und nun wieder aufs Zeichenblatt zurück, bekommt das Shape (oder die Shapes bei einer Gruppe) neue Namen, d.h. Nummern zugewiesen. Sonst würde es zu Konflikten kommen mit
=Sheet.77!Height

Wenn Sie dem Teilchen in der Schablone einen Namen geben (also aus Master.1 bspw. „Server“ machen), dann heißt das erste Shape, das aus der Schablone gezogen wird: Server, das zweite Server.2, das dritte Server.3, …

Und: Wenn Sie das Fenster Size & Position öffnen, dann sehen Sie dort in der Titelzeile den Namen.

Wie auch bei einigen anderen Fragen von Ihrer Seite: Schulterzucken meinerseits; hat sich jemand so ausgedacht; man hätte es auch anders machen können. Immerhin, wenn Sie einen falschen Namen im Shapesheet tippen (bspw.: =Sheet.104!) dann hilft Intellisense nicht mehr weiter. So erkenne ich, ob der Name korrekt ist.

schöne Grüße

Rene Martintroester

Verbinder springen zur Seite

Eine schöne Frage in der Visio-Schulung: Legt man eine Firewall über ein Netzwerkkabel, springt dieses in der Visio-Zeichnung zur Seite. Warum? Und: Wie kann man das Verhalten ausschalten?
Die Antwort: Leider hat Visio einige Einstellungen: im Dialog „Seite einrichten“ Registerkarte „Layout und Routing“ kann man einstellen, dass die Verbinderteilung aktiviert ist und/oder, dass andere Shaps beim Ablegen zur Seite geschoben werden. Außerdem kann man in der Firewall das Verhalten beim Platzieren einstellen und schließlich im Verbinder, wie er umleiten soll.
Darüber hinaus hat Visio dennoch ein Algorithmus, nach dem er die Verbindungslinien umleitet oder auch nicht umleitet.
Firewall20151220_1

Das ist eigentlich nicht gewünscht.
Das ist eigentlich nicht gewünscht.
Einige Lösungsansätze
Einige Lösungsansätze

Neues Shape

Natürlich kann man Shapes in Schablonen abspeichern. Aber vielleicht möchte ich nicht, dass Anwender solche Shapes sehen und sich dann fragen, zu welchem Zwecke sie in der Schablone liegen. Und wo sie benötigt werden.
Manchmal ist es einfacher ein Shape per Code zu erzeugen. Beispielsweise diese „Kreuzug“, die jemand haben wollte. Ein paar Zeilen Code und fertig ist das Shape:
Dim vsShapeNeu As Shape
 
Set vsShapeNeu = ActivePage.DrawRectangle(100, 200, 300, 400)
 
vsShapeNeu.Cells(„LineWeight“).FormulaU = „=1.5 pt“ ‚ Linienstärke
vsShapeNeu.Cells(„Geometry1.Y1“).FormulaU = „=Height*0.5“
vsShapeNeu.Cells(„Geometry1.Y2“).FormulaU = „=Height*0.5“
vsShapeNeu.Cells(„Geometry1.Y3“).FormulaU = „=Height*0.5“
vsShapeNeu.Cells(„Geometry1.Y4“).FormulaU = „=Height*0.5“
 
vsShapeNeu.AddSection visSectionFirstComponent + 1
vsShapeNeu.AddRow visSectionFirstComponent + 1, visRowComponent, visTagComponent
vsShapeNeu.AddRow visSectionFirstComponent + 1, visRowVertex, visTagLineTo
vsShapeNeu.AddRow visSectionFirstComponent + 1, visRowVertex, visTagMoveTo
 
vsShapeNeu.Cells(„Geometry2.X1“).FormulaU = „=Width*0.5“
vsShapeNeu.Cells(„Geometry2.Y1“).FormulaU = „=Height*0“
vsShapeNeu.Cells(„Geometry2.X2“).FormulaU = „=Width*0.5“
vsShapeNeu.Cells(„Geometry2.Y2“).FormulaU = „=Height*1“
 
vsShapeNeu.AddSection visSectionFirstComponent + 2
vsShapeNeu.AddRow visSectionFirstComponent + 2, visRowComponent, visTagComponent
vsShapeNeu.AddRow visSectionFirstComponent + 2, visRowVertex, visTagLineTo
vsShapeNeu.AddRow visSectionFirstComponent + 2, visRowVertex, visTagLineTo
vsShapeNeu.AddRow visSectionFirstComponent + 2, visRowVertex, visTagLineTo
vsShapeNeu.AddRow visSectionFirstComponent + 2, visRowVertex, visTagLineTo
vsShapeNeu.AddRow visSectionFirstComponent + 2, visRowVertex, visTagMoveTo
 
vsShapeNeu.Cells(„Geometry3.X1“).FormulaU = „=Width*0.5“
vsShapeNeu.Cells(„Geometry3.Y1“).FormulaU = „=Height*0.25“
vsShapeNeu.Cells(„Geometry3.X2“).FormulaU = „=Width*0.75“
vsShapeNeu.Cells(„Geometry3.Y2“).FormulaU = „=Height*0.5“
vsShapeNeu.Cells(„Geometry3.X3“).FormulaU = „=Width*0.5“
vsShapeNeu.Cells(„Geometry3.Y3“).FormulaU = „=Height*0.75“
vsShapeNeu.Cells(„Geometry3.X4“).FormulaU = „=Width*0.25“
vsShapeNeu.Cells(„Geometry3.Y4“).FormulaU = „=Height*0.5“
vsShapeNeu.Cells(„Geometry3.X5“).FormulaU = „=Width*0.5“
vsShapeNeu.Cells(„Geometry3.Y5“).FormulaU = „=Height*0.25“

Form20151208