Mastershape

Sehr geehrter Herr Martin,
erst mal Danke für Ihre Antwort und eine Gutes neues Jahr 2013.
Wenn ich ein Mastershape in meiner Schablone anklicke, öffnet sich zwar das Zeichenfenster, ist aber leer! Und das bei allen Shapes. Benutze W 7 64-bit. Können Sie mir helfen? Vielen Dank!
Bei Rückfragen stehe ich Ihnen gerne zur Verfügung
Mit freundlichen Grüßen
H.K.

*lach*

doch, doch!
Hallo Herr K.,
öffnen Sie Ihr Fenster des Mastershapes. Wählen Sie [Strg]+[A]. Wie geschrieben ist nun das Shape markiert. Wo? Ziemlich klein irgendwo rechts oben. Sie werden es (fast) nicht finden. Ich habe es gefunden, indem ich das Fenster „Größe und Position“ (Registerkarte Ansicht) geöffnet habe und dort größere Werte eingegeben habe – statt 9 mm besser: 90 mm. Dann taucht es auf. Schieben Sie es nun in Richtung Zeichenblatt (das bei Ihnen auch eine Größe 9 x 9 mm hat), verkleinern Sie es, passen Sie es mittig an, schließen es – dann klappt es auch. Bei mir zumindest.

Bei Ihnen auch?

Rene Martin

stochastik

Doppelklickverhalten

Heute in der Visio-Schulung kam die Frage, woran man erkennen kann, dass hinter einem Shape ein Doppelklick-Verhalten liegt.
Antwort: gar nicht! Deshalb: sagen Sie solche Dinge Ihren Kollegen oder kennzeichnen Sie so eine Funktionalität im Dokument.

doppelklicken

Die Fläche

Über den Befehl Ansicht/Makros/Add-Ons/Visio-Extras/Shape-Fläche und -Umfang kann Einblick in die Länge des Umfangs und in die Größe der Fläche eines Shapes genommen werden, wie Sie in der Abbildung sehen. Leider können Sie mit diesem Assistenten nicht die Fläche oder den Umfang in das Shape eintragen. Sie müssten sich die gewünschte Angabe mit Kopieren (Strg+C im Dialogfeld) und Einfügen übertragen, was den Assistenten nahezu obsolet macht. Bei komplizierten zusammengesetzten Shapes versagt bisweilen die eine oder andere Berechnung und liefert ein 0-Ergebnis.
Natürlich kann man eigene Felder einfügen. So können beispielsweise Rechtecke ihren Flächeninhalt als Text anzeigen. Dazu wird in der Benutzerformel
=Height*Width
eingefügt. Sie berechnet stets die korrekte Fläche eines Rechtecks.
Übrigens kann man mit der Benutzerformel auch rechnen. Beispielsweise die Fläche eines Kreises:
=Width*Width/4*PI()
Oder einer Ellipse:
=Width*Height/4*PI()
Oder von einem Parallelogramm:
=ABS(Geometry1.X1-Geometry1.X2)*Height.

flaeche

Hallo Herr Martin,
vielen Dank noch einmal, dass Sie mir bei meiner letzten Frage helfen konnten. Mittlerweile habe ich es auch geschafft meine selbst erstellen Grafiken einzufügen.
Mein Chef möchte aber nun von mir, dass auch die Verbinder in einem selbst erstellten Layout erscheinen. Das heißt, er will auf den „Verbinder“- Button klicken und statt der Standardlinie seinen selbst erstellten Pfeil erscheinen lassen und das auch noch, je nach Bedarf, in verschiedenen Farben. Meine Frage: Ist das möglich? Kann das Programm eigen erstellte Layouts als Verbinder benutzen?
Es wäre nett wenn Sie mir noch einmal eine kurze Anleitung geben könnten.

Mit freundlichen Grüßen

Philip K

######################

Hallo Philip,

Die Idee ist folgende:
Man kann eigene Muster/Linien/Linienenden definieren (über den Zeichnungsexplorer. Man kann die selbstdefinierten Linienenden leider nicht an ein Design hängen (keine Ahnung warum nicht).
Aber da Visio noch immer die „alten“ Formatvorlagen verwendet, kann man die selbst definierten Linienenden an die Formatvorlage „Verbinder“ hängen. Nun kann man mit einem Klick (okay. Es sind sechs Klicks) ohne Programmierung die Pfeilspitzen ändern

schöne Grüße
Rene

formatvorlagen

Verfahrensablauf

Mit Visio kann man leicht Verfahrensabläufe darstellen. Mit einigen Zeilen Code kann man auch „Bewegung in die Sache bringen“, das heißt: die Shapes animieren lassen.
Sie finden das Beispiel auf meiner Homepage Papierfabrik, wo Sie das Beispiel herunterladen und den Code einsehen können. Mit einem Doppelklick auf den linken oberen LKW wird es gestartet.

papierfabrik

Linienmuster

Ich werde regelmäßig gefragt, wie man eigene Linienmuster, beziehungsweise Füllmuster in Visio erzeugen kann. Nun: wenn der Entwicklermodus eingeschaltet ist, dann findet sich in der Registerkarte „Entwicklertools“ das Fenster „Zeichnungsexplorer“. Dort können über das Kontextmenü neue Füllmuster, Linienmuster und Linienenden definiert werden. In einem zweiten Blatt werden diese Elemente definiert und können nun über den Format-Dialog angewendet werden.
Hier sehen Sie eine Rolle, die beim Verbreitern mehrere Kreise anzeigt und nicht die einzelnen Kreise verbreitert.

linienmuster

Linienmuster

Gestern erhielt ich eine Frage zum Thema „Linienmuster“:
Hallo Herr Martin,
Wenn ich die Linien definiere kann ich unter Layout und Routing einstellen wir der Kreuzungspunkt von zwei Verbinden dargestellt werden soll. Wenn ich jedoch Lücke wähle, wird die Lücke nicht dargestellt. Alle anderen Darstellungsarten funktionieren. Haben Sie einen Tipp für mich wo ich da nachschauen kann?
Grüße,
Alexander K.

Meine Antwort:
[…]
Ich habe zuerst versucht weitere Muster zu erstellen und in den Mustern zu probieren, ob:
* es mit einer Linie funktioniert (man kann ja Shapes verknüpfen)
* es mit gruppierten oder nicht gruppierten Linien funktioniert
* es mit mehreren Teilstücken funktioniert
* es mit einer gemusterten Linie funktioniert …
Dann habe ich im Shape versucht mit oben und unten; mit dünner und dicker Linie – keine Chance!

Übrigens: definieren Sie mal ein neues Linienmuster, das aus einer einfachen, beispielsweise roten Linie besteht. Wenden Sie das Muster (Format) an. Schalten Sie im Verhalten den Bogen ein – klappt! Schalten Sie dagegen Lücke ein -> klappt nicht! (als Argumentation für den Kunden …)

Eine Lücke in Visio? Sicherlich.

schnecke

Mehrsprachigkeit

Immer wieder werde ich in Visio-Schulungen gefragt, wie man schnell eine mehrsprachige Zeichnung erstellen kann.
Nun eine Lösung besteht darin, die einzelnen Texte auf verschiedene Layer zu legen. Auf dem Blatt befindet sich ein Kontextmenü. Daruber werden die einzelnen Layer ein- bzw. ausgeblendet.
Und so kann man leicht von Polnisch auf Ukrainisch umschalten.
Jede (Action-)Zeile schreibt in eine benutzerdefinierte Zelle den Spracheintrag:
=SETF(„User.Sprache“,Actions.Row_1)
Die Zelle Visible der Layer vergleicht diesen Eintrag mit sich selbst. Beachten Sie, dass Sie bei einem Textvergleich kein Gleichheitszeichen, sondern die Funktion StrSame verwenden müssen!
=GUARD(STRSAME(User.Sprache,Layers.Name[8]))

mehrsprachigkeit02 mehrsprachigkeit01

VBA

Hallo Zusammen!
Ich arbeite zur Zeit an der Generierung eines Cross-Functional-Charts mit VBA & Visual Studio 2010.
Ich bin mittlerweile soweit, dass ich aus einer Excel-Tabelle meine Pages und die dazugehörigen Swimlanes erstellen kann.
Nun möchte ich Prozess-Shapes in die Swimlanes legen, habe aber noch keine Lösung dazu gefunden.
habe es schon mit der ContainerProperties.AddMember Methode versucht. Die Shapes werden zwar den richtigen Swimlanes zugeordnet, werden aber nicht im Swimlane sondern daneben und übereinander positioniert.
Hat vielleicht jemand eine IDee/Code-Beispiele/Link-Tipps, um diesem Problem Herr zu werden?
Außerdem würde ich mich über ein paar Link-Tipps zum Thema Visio-Koordinatensystem und die Positionierung von Shapes interessieren.
Ich verstehe nicht, was es mit den einheitenlosen Angaben beim Drop-befehl auf sich hat.
Wo positioniert Visio ein Shape wenn ich folgenden Befehl eingebe?
Page.Drop(master, 2.5, 4.5)
Millimeter-Angaben können es ja nicht sein, wenn ich sie nicht explizit angebe.
Ich danke im Voraus schon mal für jede Hilfe und wünsche allen einen angenehmen Tag.
Viele Grüße
B.
###############
Hallo Herr B.,
Sie sollten in Visio immer die Maßeinheit dazu schreiben. Leider verwendet er häufig cm, manchmal allerdings inch.
Der Befehl
ActivePage.Drop(mastObj, 2, 3.5)
positioniert das Shape – genauer: den Pin des Shapes (meistens Mitte/Mitte – steht im ShapeSheet) an die x-Position 2 inch und die y-Position 3,5 inch – IMMER gemessen von der linken unteren Ecke des Zeichenblattes. Das Shape können und sollten Sie danach dorthin platzieren, wo Sie es haben wollen.
Beispiel:
Sub Shape_Aus_Schablone02()
Dim stnObj As Document
Dim mastObj As Master
Dim shpObj As Shape
If SchabloneOffen(„BASFLO_M.vss“) = False Then
Documents.OpenEx „BASFLO_M.VSS“, visOpenDocked
End If
If GibtEsMastershape(„BASFLO_M.VSS“, „Start/Ende“) = False Then
MsgBox „Das Shape „“Start/Ende““ existiert nicht.“
Exit Sub
End If
Set stnObj = _
Documents(„BASFLO_M.VSS“)
Set mastObj = stnObj.Masters(„Start/Ende“)
Set shpObj = ActivePage.Drop(mastObj, 2, 3.5)
shpObj.Cells(„PinX“).Result(visMillimeters) = 100
shpObj.Cells(„PinY“).Result(visMillimeters) = 60
shpObj.Text = „Ich bin der Terminator!“
End Sub
Function SchabloneOffen(Schablonenname As String) As Boolean
Dim stnObj As Document
Dim blnOffen As Boolean
blnOffen = False
For Each stnObj In Application.Documents
If Schablonenname = stnObj.Name Then
blnOffen = True
Exit For
End If
Next
SchabloneOffen = blnOffen
End Function
Function GibtEsMastershape(Schablonenname As String, _
Mastershapename As String) As Boolean
Dim stnObj As Document
Dim blnVohanden As Boolean
Dim mastObj As Master
blnVohanden = False
Set stnObj = Application.Documents(Schablonenname)
For Each mastObj In stnObj.Masters
If mastObj.Name = Mastershapename Then
blnVohanden = True
Exit For
End If
Next
GibtEsMastershape = blnVohanden
End Function
oder hier noch zwei Beispiele zum exakten Platzieren:
Sub ZellWerteSchreiben01()
Dim shpRechteck As Shape
Set shpRechteck = ActivePage.DrawRectangle(0, 0, 0, 0)
With shpRechteck
.Cells(„Width“).Result(„mm“) = 40
.Cells(„Height“).Result(„mm“) = 20
.Cells(„Angle“).Result(visDegrees) = 0
.Cells(„PinX“).Result(visMillimeters) = 100
.Cells(„PinY“).Result(visMillimeters) = 60
End With
End Sub
Sub ZellWerteSchreiben02()
Dim shpRechteck As Shape
Set shpRechteck = ActivePage.DrawRectangle(0, 0, 0, 0)
With shpRechteck
.Cells(„Width“).Result(„mm“) = 40
.Cells(„Height“).Result(„mm“) = 20
.Cells(„LocPinX“).Formula = „=Width*0.75“
.Cells(„LocPinY“).Formula = „=Height*0.75“
.Cells(„Angle“).Result(visDegrees) = 0
.Cells(„PinX“).Result(visMillimeters) = 100
.Cells(„PinY“).Result(visMillimeters) = 60
End With
End Sub
Auf meiner Seite visio-training.de finden Sie unter Beispiele / Programmierung einige Beispiele zum exakten Positionieren: Autorennen, Papierfabrik, Viertaktmotor
viel Spaß mit Visio wünscht Ihnen
Rene Martin

VBA

Guten Abend,
Ich habe da ein kleines Problem mit Visio und VBA und hoffe, dass mir jemand weiter helfen kann.
Mein selbst erstelltes Shape besteht aus 5 Textfeldern, die untereinander liegen. Quasi eine Tabelle mit 5 Zeilen und 1 Spalte. Ich schaffe es, auf das Shape per VBA zuzugreifen und den Text des Shapes zu manipulieren, jedoch gelingt mir das nicht mit den einzelnen Textfeldern.
Jedem Textfeld habe ich einen Namen vergeben, um nicht unbedingt über die ID darauf zugreifen zu müssen.
Leider hat das nicht geklappt.
Über Tipps oder Links zu hilfreichen Seiten würde ich mich sehr freuen und bedanke mich im Voraus für die Mühe.
Viele Grüße
###############
Hallo Herr B.,
ich vermute, Sie haben die Shapes gruppiert. Angenommen, die Gruppe heißt „Gruppe“ (in Visio 2010 kann ich dies in der Registerkarte „Entwicklertools“ Shape-Name einstellen – bis Visio 2007 in „Format / Objektdaten“. Angenommen die Shapes heißen T1, T2, … T5
Sie greifen auf die Shapes immer über die Hierarchie zu, also beispielsweiseweise folgendermaßen:
Sub TexteSchreiben()
Dim i As Integer
For i = 1 To 5
ActivePage.Shapes(„Gruppe“).Shapes(„T“ & i).Text = „Hallo ich bin es!“
Next
End Sub
Oder einzeln:
Sub MehrTexteSchreiben()
Dim vsDok As Document
Dim vsSeite As Page
Dim vsGruppe As Shape
Dim vsKasten As Shape
Set vsDok = ActiveDocument
Set vsSeite = vsDok.Pages(„Zeichenblatt-1“)
Set vsGruppe = vsSeite.Shapes(„Gruppe“)
Set vsKasten = vsGruppe.Shapes(„T1“)
vsKasten.Text = „ich bin der erste“
Set vsKasten = vsGruppe.Shapes(„T2“)
vsKasten.Text = „und ich der zweite“
Set vsKasten = vsGruppe.Shapes(„T3“)
vsKasten.Text = „und ich der dritte“
‚ […]
End Sub
Übrigens: kennen Sie mein Visio-Programmierbuch?
Microsoft Visio 2010-Programmierung: Visio 2010 effizient anpassen und erweitern [Gebundene Ausgabe]
schöne Grüße
Rene Martin