Kategorie: ShapeSheet
Action im ShapeSheet
Umzug
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
Daten verknüpfen
Hallo Rene,
wie geht es dir? Hoffe alles gut und ihr hattet wie wir hier heute schon den ersten Schneefall?
Ich bekomm es leider immer noch nicht hin, dass ich das Feld „Zeichnungs-Nr.:“ mit den passend Feld in den Shape-Daten verknüpfe, so dass ich nichts mehr ins Schriftfeld schreiben muss. Wie Funktioniert das richtig und möglichst einfach? Weiter ist mir noch eingefallen, dass das Feld „Datum“ mit „Datum Rev.A“ immer übereinstimmen muss. Das kann man doch bestimmt auch zusammenfassen oder?
Viele liebe Grüße
Nils
#####
Hallo Nils,
zu Deinen Fragen:
1. nö – zum Glück noch kein Schnee. Zum Glück, weil ich Fahrrad fahre und keinen Schnee in der Stadt mag!
2. Layer-Schutz raus vom Block. Markiere das Feld „Zeichnungs-Nr.:“ (es sind mehrere Klicks nötig, weil wahrscheinlich Gruppe in der Gruppe in der Gruppe) Dort wird ein Datenfeld „Zeichnungsnummer“ angelegt. Im ShapeSheet holst Du Dir die Info des Zeichenblattes:
=ThePage!Prop.Zeichnungsnummer
Shape auf der Zeichnung markieren; mit [F2] editieren, an das Ende des Textes klicken (sonst wird der Text überschrieben). Und dort wird mit Einfügen / Feld das Datenfeld eingefügt.
3. Klar – Du kannst einen Bezug von einem Shape auf ein anderes machen. Schau nach, wie es heißt (hier: Sheet.439). Und dann verweist Du mit =Sheet.439!Prop.Datum auf die andere Zelle.
Übrigens würde ich die 0 im Feld Datum ausblenden mit:
=GUARD(IF(ThePage!Prop.Datum=0,““,ThePage!Prop.Datum))
Kommst Du damit klar?
Wenn nicht – frag mich einfach
lg
Rene
Intelligenter Block
Hübsche Frage heute in der Visio-Schulung.
Wir hätten gerne einen Block, der beim Herausziehen Informationen abfragt. Diese Informationen sollen an bestimmte Stellen des Blocks geschrieben werden. Außerdem soll der Block in der rechten unteren Ecke stehen.
Das letzte ist schnell realisiert: Im ShapeSheet wird in der Zelle PinX eingetragen:
=GUARD(ThePage!PageWidth-10 mm)
Bei PinY:
=GUARD(10mm)
Für das erste Problem wird auf der Gruppe Daten definiert (hier: Prozess, Version, Verfasser).
In drei Mitgliedsshapes wird jeweils eines der Datenfelder angelegt, also: Prozess, Version und Verfasser.
Ein Verweis vom inneren zum äußeren Shape, beispielsweise:
=Sheet.52!Prop.Verfasser
zieht sich die Dateninformation. Diese wird nun über ein Feld eingefügt.
Über „Verhalten“ kann man verhindern, dass der Anwender aus Versehen in die Gruppe hineingelangt.
Über „Schutz“ kann man verhindern, dass der Anwender aus Versehen das Gruppenshape beschriftet.
Das Fenster „Shapedaten“
Es ist einfach und effektiv.
Ein Kunde hat an ein Zeichenblatt Datenfelder gebunden, die in einem Anmerkungsfeld rechts unten angezeigt werden. Da einige Benutzer dieses Fenster schließen, ist ein Mechanismus vonnöten, mit dem man wieder schnell öffnen kann. Na – eine Zeile „Action“ im ShapeShape. Der Befehl DoCmd(1312) öffnet jedoch das allgemeine, über dem Blatt schwebende Datenfenster. Schöner wäre das Andockfenster. Da ich den Befehl dafür nicht weiß, bemühe ich den Makrorekorder. Er zeichnet auf:
[…]
Application.ActiveWindow.Windows.ItemFromID(visWinIDCustProp).Visible = True
[…]
Im Objektkatalog finde ich die Zahl 1658 für die Konstante visWinIDCustProp. Und mit DoCmd(1658) wird das Andockfenster geöffnet.
Steuerelemente / Controls
Zugriff auf andere Seiten per ShapeSheet
Manchmal entdecke ich Dinge erst sehr viel später.
Ich dachte, dass es nicht funktioniert, auf ein Shape zuzugreifen, das auf einem anderen Zeichenblatt liegt. Die Hilfe liefert, dass der Verweis auf das andere Shape mit
=Pages[Blattname]!Shapename!Zelle
erfolgt. Ein Versuch:
=Pages[Zeichenblatt-2]!Sheet.1!Width
scheitert. Der Grund: Man darf nicht den Namen des Zeichenblattes (hier: Zeichenblatt-2), sondern den internen Namen (Hier: Page-2) verwenden. Wie ermittelt man ihn? Mit einer Zeile Code:
MsgBox ActivePage.NameU
Und dann liefert
=Pages[Page-2]!Sheet.1!Width
oder
=Pages[Page-2]!Sheet.1!Prop.Name
ein korrektes Ergebnis.
Servicefläche
Lustige Sache: Ein Kunde wollte bei einem technischen Gerät eine Service Fläche haben. Also füge ich in die Gruppe eine solche schraffierte Fläche ein. Natürlich soll die Fläche in der Größe variabel sein. Also wird der Gruppe ein Kontrollelement hinzugefügt, die Ecken des Rechtecks verweisen im ShapeSheet auf dieses Kontrollelement, man schränkt die Bewegung des Kontrollelements auf eine Richtung ein und gibt ihm eine Beschriftung und „schützt“ die Gruppe: der Anwender darf nur die Gruppe auswählen – nicht die Mitgliedselemente der Gruppe.