René Martin Microsoft Visio 2007-Programmierung · Quadrat zu einem Rechteck verzerrt. Nicht so...

35
René Martin Microsoft Visio 2007-Programmierung ISBN-10: 3-446-41084-8 ISBN-13: 978-3-446-41084-8 Vorwort Weitere Informationen oder Bestellungen unter http://www.hanser.de/978-3-446-41084-8 sowie im Buchhandel

Transcript of René Martin Microsoft Visio 2007-Programmierung · Quadrat zu einem Rechteck verzerrt. Nicht so...

Page 1: René Martin Microsoft Visio 2007-Programmierung · Quadrat zu einem Rechteck verzerrt. Nicht so bei Visio. Mit zwei Klicks kann ich die Eigenschaften des Quadrats so verändern,

René Martin

Microsoft Visio2007-Programmierung

ISBN-10: 3-446-41084-8ISBN-13: 978-3-446-41084-8

Vorwort

Weitere Informationen oder Bestellungen unterhttp://www.hanser.de/978-3-446-41084-8

sowie im Buchhandel

Page 2: René Martin Microsoft Visio 2007-Programmierung · Quadrat zu einem Rechteck verzerrt. Nicht so bei Visio. Mit zwei Klicks kann ich die Eigenschaften des Quadrats so verändern,

XI

Vorwort

Warum Visio?

Vor vielen Jahren habe ich Visio das erste Mal gesehen, in der Version 3.0. Damals habe ich wenige Unterschiede zu anderen Grafik- oder Präsentationsprogrammen feststellen können. Aber je länger ich Visio unterrichte, darin programmiere und mich damit beschäf-tige, desto begeisterter bin ich. Die Anwendungsmöglichkeiten sind schier unbegrenzt. Es gibt zwei Gründe, warum ich dieses Programm so sehr liebe. Zum einen ist es einfach zu bedienen. Schon früh wurde seine Benutzeroberfläche der von anderen Microsoft-Produkten angepasst. So findet sich jemand, der schon mit Word, Excel oder PowerPoint gearbeitet hat, leicht hinein und kann schnell Geschäftsdiagramme erstellen. Stellen Sie sich einen gezeichneten Raumplan vor. Stellen Sie sich vor, Sie müssten alle Linien einzeln per Hand ziehen. Die Arbeit wäre immens groß. Oder stellen Sie sich einen LAN-Schrank vor. Um alle Patch-Stecker, Module, Bretter und sonstigen Elemente per Hand zu zeichnen, würde man Tage benötigen. Visio bietet für solche Probleme eine Reihe vorgefertigter Lösungen, deren Elemente lediglich auf die Seite gezogen und dort richtig verbunden werden müssen. Schon ist das physikalische oder das logische Objekt fertig. Der andere Vorteil liegt in der Tiefe. Vielleicht etwas versteckt und für den Benutzer nicht direkt sichtbar, liegt eine Reihe von Funktionen verborgen. Nicht nur dass sich jeder An-wender eigene Shapes erstellen und abspeichern kann, jeder kann diese Shapes auch mit eigener „Logik“ versehen. Was heißt das? Stellen Sie sich ein Quadrat vor. Zieht der Benutzer an einer der vier Seiten, dann wird das Quadrat zu einem Rechteck verzerrt. Nicht so bei Visio. Mit zwei Klicks kann ich die Eigenschaften des Quadrats so verändern, dass es immer ein Quadrat bleibt. Oder dass es seine Größe gar nicht mehr verändert. Oder seine Lage. Das ist eine der offensichtlichen Stärken. Viel wichtiger dagegen ist jedoch, dass mit Symbolen auf einer Zeichnung be-stimmte Informationen abgespeichert werden können. Stellen Sie sich als Zeichnung den Grundriss eines Bürogebäudes vor. In ihm sind nicht nur die elektrischen Installationen verzeichnet, sondern auch das Mobiliar und die dort aufgestellten Computer. An jedes

Page 3: René Martin Microsoft Visio 2007-Programmierung · Quadrat zu einem Rechteck verzerrt. Nicht so bei Visio. Mit zwei Klicks kann ich die Eigenschaften des Quadrats so verändern,

Vorwort

XII

dieser Objekte auf dem Zeichenblatt werden Informationen gebunden, wie beispielsweise Preis, Artikelnummer, Bezeichnung, Benutzer und so weiter. Nun kann mit einem Maus-klicks eine Inventarliste erstellt werden, in der nicht nur die Informationen angezeigt wer-den, sondern auch die Summe der Anschaffungskosten berechnet werden kann. Diese Liste kann mühelos in ein anderes Programm, beispielsweise Excel, exportiert werden. Noch ein Beispiel: Stellen Sie sich eine Datenbank vor, in der die Mitarbeiter einer großen Firma aufgelistet sind. Per Knopfdruck soll in Visio ein Organisationsdiagramm erstellt werden, in dem jeder Mitarbeiter ein eigenes Kästchen besitzt, Hierarchien durch Linien gekennzeichnet werden und für jede Abteilung ein eigenes Zeichenblatt angelegt wird. Zwar stellt Visio für solche Standardaufgaben Assistenten zur Verfügung; wollen Sie je-doch eigene Funktionen hinterlegen, so können Sie Lösungen für solche Aufgaben selbst programmieren. Nicht nur dass Sie „intelligente“ Shapes erstellen und abspeichern können, Sie haben auch die Möglichkeit, Informationen einer Zeichnung in Tabellen oder Daten-banken zu speichern. Oder Sie können umgekehrt Visio von außen steuern, indem Sie gespeicherte Informationen nach Visio übertragen, wo ein Diagramm erzeugt wird. Dies sind die Themen des vorliegenden Buchs.

Warum kein anderes Programm?

Um es ganz deutlich zu sagen: Visio ist kein Zeichenprogramm, Visio ist kein Grafikpro-gramm, und Visio ist kein Präsentationsprogramm! Vergleicht man Visio in dieser Hin-sicht mit anderen Software-Produkten, wird man schnell enttäuscht sein. Visio will dage-gen etwas anderes: Es geht um das schnelle Erzeugen eines Geschäftsdiagramms mittels vorgegebener Symbole. Diese werden auf das Zeichenblatt gezogen, dort angeordnet, formatiert, beschriftet und möglicherweise mit Linien verbunden. Visio ist übrigens auch kein CAD-Programm. Viele technische Zeichner, die seit Jahren mit einem CAD-Programm arbeiten, vermissen Funktionen in Visio. Zwar besitzt Visio einige Funktionen, die sicherlich aus dem CAD-Bereich übernommen sind. Dennoch: Betrachten Sie einmal den Preis! Visio kostet etwas nur 10% dessen, was ein CAD-Programm kostet. Und: Visio kann angepasst werden. Ab und zu erlebe ich es auch, dass Mitarbeiter von Firmen versuchen, PowerPoint oder Word für solche Zwecke zu „missbrauchen“. Natürlich kann ich per Programmierung auf eine Datenbank zugreifen und aufgrund der Daten in PowerPoint ein Organigramm erstel-len. Jedoch: Wer dies versucht, wird sehr schnell an die Grenzen stoßen. Visio ist für sol-che Zwecke sehr viel flexibler und besser zu handhaben.

Eine kurze Geschichte von Visio

ShapeWare Corp., wie Visio Corp. zuerst genannt wurde, wurde 1990 von zwei Mitbe-gründern der Firma Aldus Corp. ins Leben gerufen. Aldus ist vor allem durch seinen Pa-

Page 4: René Martin Microsoft Visio 2007-Programmierung · Quadrat zu einem Rechteck verzerrt. Nicht so bei Visio. Mit zwei Klicks kann ich die Eigenschaften des Quadrats so verändern,

Vorwort

XIII

geMaker bekannt geworden; später fusionierte die Firma mit Adobe. Als Visio 1.0 1992 vorgestellt wurde, gewann es schnell wegen der einfachen Bedienbarkeit an Beliebtheit. 1993 stellte ShapeWare optionale Schablonen mit Shapes zur Verfügung, die „Visio Sha-pes“ genannt wurden. Als die Schablonen 1996 in „Visio Solutions Library“ umbenannt wurden, wurden sogar Add-Ons zur Verfügung gestellt. Nach den Versionen 1.0, 2.0, 3.0 und 4.0 begann Visio, verschiedene Module zu entwi-ckeln. Visio Technical wurde als CAD-begleitende Software 1994 am Markt angeboten – damals noch als Visio 4.1. 1995 wurde ShapeWare Corp. in Visio Corp. umbenannt und ging unter diesem Namen an die Börse. Visio Professional wurde 1996 entwickelt – damals als Version 4.5. 1998 folgte Intelli-CAD – ein AutoCAD-kompatibles CAD-Programm, das allerdings andere Supports benö-tigte als Visio und deshalb bald wieder aus dem Paket genommen wurde. 1999 wurde Visio von Microsoft gekauft. Damals gab es Visio als Version 2000 (eigent-lich: Visio 6.0) mit den vier Paketen: Visio Standard, Professional, Technical und Enter-prise. Während Microsoft an dieser Version noch wenig änderte, zeigten sich die Gestal-tungselemente von Microsoft deutlich in der aktuellen Version 2002 beziehungsweise Visio 10.0. Im Frühjahr 2007 erschien Visio 2007 oder Visio 11.0. Übrigens verwendet Visio seit der Version 2003 keine länderspezifischen Namen in den ShapeSheets. Sie sind nun einheitlich auf Englisch, was den internationalen Austausch erleichtert. Weitere Informationen finden Sie auf der Microsoft-Homepage unter der URL http://www.microsoft.com/germany/produkte/. Dort wählen Sie unter „Office“ „Visio“ aus.

Die verschiedenen Visio-Versionen

Visio liegt in den Versionen 5.0 und 2000 in drei verschiedenen Paketen vor: Standard, Technical und Professional. In 2002 wurde es nun auf zwei Pakete minimiert: Standard und Professional. So wird es auch in der aktuellen Version 2007 verkauft. Das Programm ist in beiden Versionen das gleiche – die Unterschiede liegen in den Details. Der gesamte Umfang von Visio Standard findet sich ebenso in Visio Professional. Die folgende Tabelle listet die Unterschiede auf und versucht zu verdeutlichen, für welchen Benutzer welches Paket geeignet ist: Standard Professional

Benutzer Mitarbeiter von Firmen:

Leitung

Finanzen

Planung, Projektmanagement

Controlling

Benutzer

Datenbank- und Netzwerkadministration:

Datenbankprogrammierer

Netzwerkspezialisten

Software-Programmierer

Elektrotechniker, Ingenieure

Page 5: René Martin Microsoft Visio 2007-Programmierung · Quadrat zu einem Rechteck verzerrt. Nicht so bei Visio. Mit zwei Klicks kann ich die Eigenschaften des Quadrats so verändern,

Vorwort

XIV

Standard Professional

Verkauf und Marketing Architekten, Innenarchitekten

Maschinenbauer (Hydraulik, Pneumatik)

Verfahrenstechniker

Zweck

Geschäftsdiagramme erstellen

Informationssysteme und -prozesse darstellen

Zweck

Zweidimensionale technische Zeichnungen erstellen

Vorlagen

Flussdiagramm

Geschäft

Büroplan

Terminplan

Vorlagen

Konstruktion

Netzwerk

Pläne und Grundrisse

Software und Datenbank

Über dieses Buch

Diese drei Schwerpunkte bilden die zentralen Themen des vorliegenden Buchs. Kapitel 1 befasst sich mit der Intelligenz der Shapes. Oder wie Visio es nennt: die

Shape-Sheet-Programmierung. In diesem Kapitel wird ausführlich erläutert, welche Informationen an ein Shape gebunden werden können, damit es seinen optimalen Einsatz beim Benutzer findet.

In den Kapiteln 2 bis 8 wird die Programmiersprache VBA vorgestellt. Es wird beschrieben, wie man sich eigene, benutzerdefinierte Dialoge (und damit Assistenten) erstellen kann. Und schließlich wird gezeigt, wie man per Programmierung auf Visio zugreifen kann: wie Dateien und Schablonen geöffnet und Shapes auf das Zeichenblatt gezogen werden. Dann wird erklärt, wie Shapes per Programmierung formatiert und verbunden werden. Liegt einem solchen Programm eine Datenbank zugrunde, können die Daten aus dieser Datenbank ausgelesen und in Visio grafisch umgesetzt werden. Oder umgekehrt: Daten werden von Visio nach Word, Excel oder Access geschrieben.

Kapitel 9 widmet sich der Programmierumgebung Visual Studio.NET. Damit können exe-Dateien erstellt werden, mit denen auf Visio zugegriffen oder in die Visio eingebunden wird. Mit ihnen können *.dll-Dateien erzeugt werden, die in der Visio-Programmierung Verwendung finden. Und schließlich erzeugt VS.NET aus einem Programm ein Diagramm, beziehungsweise ein als Zeichnung erstelltes Software-Diagramm kann den Programmiercode erzeugen.

Page 6: René Martin Microsoft Visio 2007-Programmierung · Quadrat zu einem Rechteck verzerrt. Nicht so bei Visio. Mit zwei Klicks kann ich die Eigenschaften des Quadrats so verändern,

Vorwort

XV

Die Hinweise in diesem Buch

Um Ihnen die Orientierung in diesem Buch zu erleichtern, haben wir den Text in bestimm-te Funktionsabschnitte gegliedert und diese durch entsprechende Hinweise gekennzeich-net. Folgende Texte finden Verwendung:

Hinweis Manches ist von besonderer Bedeutung und verdient darum, auch besonders hervorgehoben zu werden. Solche Hinweise sind sehr nützlich, damit erreichen Sie schneller das Ziel.

Tipps & Tricks Manches geht ganz leicht. Wenn man nur weiß wie. Tipps und Tricks finden Sie in den Ab-schnitten, bei denen dieser Text steht.

Warnung Achtung, mit diesem Hinweis wird eine Warnung angezeigt. An der markierten Stelle sollten Sie besonders achtsam sein.

Folgende Tabelle gibt eine Übersicht zu den im Buch verwendeten Schreibkonventionen: Element Beispiel Formatierung

Dateinamen, mit oder ohne Pfad

C:\Eigene Dateien\ Sonstiges\Technik.vsd

Kursiv

Menüs DATEI | DRUCKEN KAPITÄLCHEN

spezielle Bezeichnungen, die im Text mitgelesen werden können, und Punkte auf Dia-logblättern, Steuerelemente, Beschriftungen, Titel, Namen von Symbolleisten

„True“ „Laufweite“ „Standard“

in „Anführungszeichen“

Tasten [Strg]+[A] in eckigen Klammern

Programmiercode, Schlüssel-wörter und Variablennamen

=Höhe*Breite Nichtproportionalschrift

Zu den Beispieldateien

Die Bildschirmfotos sind in Visio 2007 und Visual Studio 2005 gemacht worden. Fast alle in diesem Buch beschriebenen Codeteile lassen sich auf ältere Visio-Versionen – insbe-sondere Visio 2003 – übertragen. In den Ordnern finden Sie die Dateien, die das Buch begleiten. Sie finden die Dateien zum Download sowohl auf meiner Homepage als auch unter http://downloads.hanser.de.

Page 7: René Martin Microsoft Visio 2007-Programmierung · Quadrat zu einem Rechteck verzerrt. Nicht so bei Visio. Mit zwei Klicks kann ich die Eigenschaften des Quadrats so verändern,

Vorwort

XVI

Geben Sie dort bitte entweder den Namen des Autors, den Titel oder die ISBN des Buches ein. So gelangen Sie zu den Beispielen. Sie sind in gepackter Form abgelegt, um das Vo-lumen des Datentransfers möglichst gering zu halten.

Ein Dankeschön

geht wie immer an den Lektor des Hanser-Verlags, Fernando Schneider, sowie an Monika Kraus und Brigitte Aurnhammer, die mir bei der Veröffentlichung behilflich waren, eben-so an alle anderen Mitarbeiter des Hanser-Verlags, ohne die das Buch nicht erschienen wäre. Ein Dank geht an Frau Gottmann, die wie immer eine Menge Tipp-, Stil- und Recht-schreibfehler und anderes im Manuskript gefunden hat, was nicht hineingehört. Ein Dankeschön geht auch an Heiko Kemnitzer, der mich mit einigen Informationen ver-sorgt hat, insbesondere mit denen bezüglich Add-Ins und VS.NET. Sie habe ich in Kapi-tel 9 eingearbeitet. Ohne das profunde Wissen von Heiko Kemnitzer aufgrund seiner jahre-langen Tätigkeit bei faciware hätte dieses Kapitel so nicht geschrieben werden können. Weitere Informationen finden Sie unter http://www.faciware.com.

Kontakt zum Autor

Da ich Visio seit einigen Jahren unterrichte und auch Lösungen in Visio erstelle, bin ich sehr an Anregungen, Kritik und Meinungen interessiert. Wenn Sie Kontakt zu mir auf-nehmen oder mehr Informationen über mich haben möchten, dann finden Sie meine Ho-mepage unter http://www.compurem.de. Sie erreichen mich unter [email protected]. Nun bleibt mir nur noch, Ihnen viel Spaß beim Lesen des Buchs zu wünschen. René Martin München, Mai 2007

Page 8: René Martin Microsoft Visio 2007-Programmierung · Quadrat zu einem Rechteck verzerrt. Nicht so bei Visio. Mit zwei Klicks kann ich die Eigenschaften des Quadrats so verändern,

René Martin

Microsoft Visio2007-Programmierung

ISBN-10: 3-446-41084-8ISBN-13: 978-3-446-41084-8

Leseprobe

Weitere Informationen oder Bestellungen unterhttp://www.hanser.de/978-3-446-41084-8

sowie im Buchhandel

Page 9: René Martin Microsoft Visio 2007-Programmierung · Quadrat zu einem Rechteck verzerrt. Nicht so bei Visio. Mit zwei Klicks kann ich die Eigenschaften des Quadrats so verändern,

3 Zugriff auf Visio

224

3.10 Die Layer

Anders als die Formatvorlagen sind die verwendeten Layer Teil des Seiten-Objekts. Des-halb muss über Page auf sie zugegriffen werden. Die Techniken sind bereits bekannt. Im folgenden Beispiel werden alle Layer angezeigt:

Sub LayerAnzeigen()

Dim i As Integer, strListe As String

For i = 1 To ActivePage.Layers.Count

strListe = strListe & _

vbCr & ActivePage.Layers(i).Name

Next

MsgBox strListe

End Sub

Oder über einen Objektzugriff:

Sub LayerAnzeigen2()

Dim layLayer As Layer

Dim strListe As String

For Each layLayer In ActivePage.Layers

strListe = strListe & vbCr & layLayer.Name

Next

MsgBox strListe

End Sub

Mit der Methode Add wird ein neuer Layer erzeugt:

ActivePage.Layers.Add "MeinLayer01"

Mit der Methode Delete kann der Layer wieder gelöscht werden. Und die Gestaltung erfolgt ebenso über den Zellzugriff.

Achtung Jedoch: So einfach wie bei der Sammlung Pages oder Documents verhält es sich bei Layers nicht. Dies soll auf den folgenden Seiten beschrieben werden.

Layer sind in Visio ein wichtiges Mittel, um Shapes zu kennzeichnen. Über den Menü-punkt FORMAT | LAYER kann ein Shape auf einen oder mehrere Layer gelegt werden.

Page 10: René Martin Microsoft Visio 2007-Programmierung · Quadrat zu einem Rechteck verzerrt. Nicht so bei Visio. Mit zwei Klicks kann ich die Eigenschaften des Quadrats so verändern,

3.10 Die Layer

225

Abbildung 3.6 Die Liste der Layer

Abbildung 3.7 Ein Shape kann auf mehreren Layern liegen.

Über ANSICHT | LAYEREIGENSCHAFTEN können alle Layer eingesehen werden. Wird ein Shape auf einen Layer gelegt, kann es anschließend in eine Schablone gezogen werden und wird so zu einem Master-Shape. Jede neue Zeichnung erhält dann automatisch diesen

Page 11: René Martin Microsoft Visio 2007-Programmierung · Quadrat zu einem Rechteck verzerrt. Nicht so bei Visio. Mit zwei Klicks kann ich die Eigenschaften des Quadrats so verändern,

3 Zugriff auf Visio

226

Layer zugewiesen, wenn das Shape aus der Schablone auf die Zeichnung gezogen wird. Achtung: Layer gelten nur für ein Zeichenblatt, sind also nicht in der gesamten Datei vor-handen.

Abbildung 3.8 Viele Assistenten verwenden Layer (hier: DATEN | BERICHTE).

Viele Assistenten verwenden die Layer zur Auswahl bestimmter Shapes: Alle Shapes, die auf einem Layer liegen, können markiert werden (BEARBEITEN | AUSWAHL NACH TYP), in Berichte und Datenbanken können Informationen bestimmter Shapes geschrieben werden, die auf eigenen Layern liegen. Doch die einfache Verwendbarkeit und der universelle Nutzen haben ihre Tücken:

3.10.1 Die Anzahl der Shapes pro Layer

Über das Menü ANSICHT | LAYEREIGENSCHAFTEN kann die Anzahl der Shapes angezeigt werden, die auf einem Layer liegen. Jedoch ist diese Zahl nicht immer korrekt: Wurden mehrere Shapes zu einer Gruppe zusammengefügt, dann wird jedes Kindelement plus die Gruppe (die ja schließlich auch ein Shape ist) gezählt. Umgekehrt kann ein Shape auf mehreren Layern liegen, sodass die Summe der Shapes nicht mit der angezeigten Summe übereinstimmen muss.

Page 12: René Martin Microsoft Visio 2007-Programmierung · Quadrat zu einem Rechteck verzerrt. Nicht so bei Visio. Mit zwei Klicks kann ich die Eigenschaften des Quadrats so verändern,

3.10 Die Layer

227

Abbildung 3.9 Die Anzahl der Shapes pro Layer ist nur bedingt brauchbar – hier: ein Shape, zwei Layer, # = 14.

3.10.2 Das ShapeSheet

Abbildung 3.10 Die Nummer der Layer des Shapes + 1 ergeben die Nummer des Layers des Zei-chenblattes (hier: bewegliche Geräte und Elektrogerät).

Page 13: René Martin Microsoft Visio 2007-Programmierung · Quadrat zu einem Rechteck verzerrt. Nicht so bei Visio. Mit zwei Klicks kann ich die Eigenschaften des Quadrats so verändern,

3 Zugriff auf Visio

228

Alle verwendeten Layer werden im ShapeSheet des Zeichenblattes angezeigt – im Ab-schnitt „Layer“. Dabei werden neue Layer in der Liste unten eingefügt – die Reihenfolge ist nicht alphabetisch sortiert – anders als im Dialog „Layereigenschaften“. Der Abschnitt „Layerzugehörigkeit“ der einzelnen Shapes greift nun auf diese Layer-Liste des Zeichenblatts zurück und listet die Layer auf – leider nicht namentlich, sondern per Nummern, zu deren Zahl 1 addiert werden muss:

="17"

steht also für die Zugehörigkeit zum siebten Layer des Zeichenblattes,

="17;33"

weist darauf hin, dass sich das Shape auf den Layern Nummer 18 und 34 befindet.

3.10.3 VBA

Noch komplizierter wird das Ganze, wenn Sie per Programmierung auf alle Layer des Zeichenblattes oder eines Shapes zugreifen. Das Objekt „Layer“ ist schnell gefunden, jedoch ist seine Verwendung nicht trivial. Zwar funktioniert:

Dim vsLayer As Layer

For Each vsLayer In ActivePage.Layers

MsgBox vsLayer.Name

Next

Jedoch erstaunt, dass ein Shape nicht über die Sammlung „Layers“ verfügt. Man muss alle Layer mit einer Zählerschleife durchlaufen:

Dim i As Integer

With ActivePage.Shapes("Sheet.1")

For i = 1 To .LayerCount

MsgBox .Layer(i).Name

Next

End With

Hier fällt auf, dass die Eigenschaft Layer eine Sammlung ist – auch ohne Pluralendung s, wie man vermuten würde. Darüber kann auch eine korrekte Zuweisung vorgenommen werden:

Set vsLayer = ActivePage.Shapes("Sheet.1").Layer(i)

Page 14: René Martin Microsoft Visio 2007-Programmierung · Quadrat zu einem Rechteck verzerrt. Nicht so bei Visio. Mit zwei Klicks kann ich die Eigenschaften des Quadrats so verändern,

3.10 Die Layer

229

Wird ein neuer Layer erstellt, muss überprüft werden, ob er bereits existiert. Da leider keine Funktion LayersExists oder Ähnliches zur Verfügung steht, muss mit einer Schlei-fe gearbeitet werden:

Dim strStandort As String

Dim fLayer As Boolean

Dim vsLayer As Layer

strStandort = "München"

With Application.ActivePage

For i = 1 To .Layers.Count

If .Layers(i).Name = strStandort Then

Set vsLayer = .Layers(i)

fLayer = True

Exit For

End If

Next

If fLayer = False Then

Set vsLayer = .Layers.Add(strStandort)

' -- überprüfe, ob es den Layer gibt

' - falls nicht, dann erzeuge ihn

End If

End With

Obwohl die Zellnamen des ShapeSheets direkt mit ihrem deutschen oder englischen Na-men angesprochen werden können (beispielsweise Breite und Höhe beziehungsweise Width und Height), stellt die Zelle Layerzugehörigkeit auch hier wieder eine Ausnahme dar. Der Zugriff erfolgt über die Zelle LayerMember), beispielsweise um das Shape von allen Layern zu entfernen:

Dim vsShape As Shape

Set vsShape = ActivePage.Shapes("Sheet.1")

vsShape.Cells("LayerMember").Formula = ""

Soll dieses Shape nun auf einen neuen Layer gelegt werden, dann wird die Methode Addnicht auf das Shape, sondern auf den Layer angewandt:

Page 15: René Martin Microsoft Visio 2007-Programmierung · Quadrat zu einem Rechteck verzerrt. Nicht so bei Visio. Mit zwei Klicks kann ich die Eigenschaften des Quadrats so verändern,

3 Zugriff auf Visio

230

vsLayer.Add vsShape, 0

Der zweite Parameter fPresMems gibt an, ob bei Gruppen die Kindelemente ausgeschlos-sen werden sollen oder nicht. Analog kann mit der Methode Remove ein Layer eines Sha-pes gelöscht werden:

vsLayer.Remove vsShape, 0

Die Methode Delete dient zum Löschen eines Layers einer Seite. Sie verlangt einen Pa-rameter fDeleteShapes. Ist er 1 oder True, werden alle Shapes, die noch auf diesem Lay-er liegen, mit dem Layer gelöscht, bei 0 (False) bleiben sie erhalten. Mit diesem Wissen kann nun beim Verschieben von einem vorhandenen Shape und beim Erzeugen von neuen Shapes von einem übergeordneten „Standort“ der Name des Standor-tes ausgelesen und das Shape auf diesen Layer gelegt werden. Für Daten (Datenfelder oder benutzerdefinierte Eigenschaften) wäre dieser Aufwand nicht ganz so schwierig:

Option Explicit

Dim WithEvents pagobj As Visio.Page

Private m_shpObj As Shape

Private Sub Document_RunModeEntered(ByVal doc As Visio.IVDocument)

Set pagobj = Visio.ActivePage

' -- beim Öffnen greife auf das Zeichenblatt zu

End Sub

Private Sub Document_ShapeAdded(ByVal Shape As Visio.IVShape)

' -- ein neues Shape wird generiert, aber kein Standort

If Left(Shape.Name, 8) <> "Standort" Then

Set m_shpObj = Shape

Call Standort_Test

End If

End Sub

Private Sub pagobj_CellChanged(ByVal Cell As IVCell)

On Error Resume Next

If Left(Cell.Name, 3) = "Pin" Or Left(Cell.Name, 4) = "Dreh" Then

Page 16: René Martin Microsoft Visio 2007-Programmierung · Quadrat zu einem Rechteck verzerrt. Nicht so bei Visio. Mit zwei Klicks kann ich die Eigenschaften des Quadrats so verändern,

3.10 Die Layer

231

' -- wird irgendein "altes" Shape verschoben

If Left(Cell.Shape.Name, 8) <> "Standort" Then

Set m_shpObj = Cell.Shape

' -- greife auf das Shape zu

Call Standort_Test

End If

End If

End Sub

Private Sub Standort_Test()

Dim vsShapeOnPage As Shape

Dim dblTolerance As Integer

Dim intSpatialRelation As VisSpatialRelationCodes

Dim strSpatialRelation As String

Dim strStandort As String

On Error GoTo errHandler

' -- die Toleranz

dblTolerance = 0.01

For Each vsShapeOnPage In ActivePage.Shapes

' -- alle vorhandenen Shapes des Zeichenblattes werden durchlaufen

If Left(vsShapeOnPage.Name, 8) = "Standort" Then

If vsShapeOnPage.Name <> m_shpObj.Name Then

' -- alle außer dem Shape selbst

If vsShapeOnPage.CellExists("Prop.Standort", True) Then

strStandort = vsShapeOnPage.Cells("Prop.Standort").Formula

Else

Page 17: René Martin Microsoft Visio 2007-Programmierung · Quadrat zu einem Rechteck verzerrt. Nicht so bei Visio. Mit zwei Klicks kann ich die Eigenschaften des Quadrats so verändern,

3 Zugriff auf Visio

232

strStandort = ""

End If

intSpatialRelation = _

vsShapeOnPage.SpatialRelation(m_shpObj, dblTolerance, _

visSpatialIncludeHidden)

' -- das Verhältnis zu anderen Shapes

Select Case intSpatialRelation

Case VisSpatialRelationCodes.visSpatialContain

Call Standort_Zuweisen(m_shpObj, strStandort)

' -- innerhalb

Exit For

Case VisSpatialRelationCodes.visSpatialContainedIn

' -- umfasst

Case VisSpatialRelationCodes.visSpatialOverlap

Call Standort_Zuweisen(m_shpObj, strStandort)

Exit For

' -- überlappt

Case VisSpatialRelationCodes.visSpatialTouching

' -- bei Berührung nichts

Case Else

' -- nicht in einem anderen Shape

Call Standort_Zuweisen(m_shpObj, "")

End Select

End If

End If

Next

errHandler:

Page 18: René Martin Microsoft Visio 2007-Programmierung · Quadrat zu einem Rechteck verzerrt. Nicht so bei Visio. Mit zwei Klicks kann ich die Eigenschaften des Quadrats so verändern,

3.10 Die Layer

233

MsgBox "Es trat ein Fehler auf:" & vbCr & _

Err.Number & ": " & Err.Description

End Sub

Private Sub Standort_Zuweisen(NeuesShape As Shape, strStandort As String)

Dim i As Integer

Dim fLayer As Boolean

Dim fStandort As Boolean

Dim vsLayer As Layer

fLayer = False

fStandort = False

If Left(strStandort, 1) = """" Then

strStandort = Mid(strStandort, 2)

End If

If Right(strStandort, 1) = """" Then

strStandort = Left(strStandort, Len(strStandort) - 1)

End If

If NeuesShape.CellExists("Prop.Standort", True) Then

For i = 1 To NeuesShape.Section(visSectionProp).Count

If NeuesShape.Section(visSectionProp).Row(i - 1).Name = _

"Standort" Then

NeuesShape.Section(visSectionProp).Row(i - 1).Cell(0). _

Formula = "=""" & strStandort & """"

Page 19: René Martin Microsoft Visio 2007-Programmierung · Quadrat zu einem Rechteck verzerrt. Nicht so bei Visio. Mit zwei Klicks kann ich die Eigenschaften des Quadrats so verändern,

3 Zugriff auf Visio

234

fStandort = True

Exit For

End If

Next

End If

If fStandort = False Then

If NeuesShape.SectionExists(visSectionProp, True) = True Then

For i = 1 To NeuesShape.Section(visSectionProp).Count

If NeuesShape.Section(visSectionProp).Row(i - 1).Cell(2). _

Formula = """Standort""" Then

NeuesShape.Section(visSectionProp).Row(i - 1).Cell(0). _

Formula = "=""" & strStandort & """"

fStandort = True

Exit For

End If

Next i

End If

End If

' -- überprüfe, ob es ein Datenfeld "Standort gibt"

' -- falls ja, dann schreibe den neuen Standort hinein.

If strStandort <> "" Then

For i = 1 To Application.ActivePage.Layers.Count

If Application.ActivePage.Layers(i).Name = strStandort Then

Set vsLayer = Application.ActivePage.Layers(i)

fLayer = True

Exit For

End If

Next

Page 20: René Martin Microsoft Visio 2007-Programmierung · Quadrat zu einem Rechteck verzerrt. Nicht so bei Visio. Mit zwei Klicks kann ich die Eigenschaften des Quadrats so verändern,

3.10 Die Layer

235

If fLayer = False Then

Set vsLayer = Application.ActivePage.Layers.Add(strStandort)

' -- überprüfe, ob es den Layer gibt

' -- falls nicht, dann erzeuge ihn

End If

NeuesShape.Cells("LayerMitglied").Formula = ""

' -- lösche alle vorhandenen Layer des Shapes

vsLayer.Add NeuesShape, 0

' -- lege das Shape auf den neuen Layer

End If

End Sub

Abbildung 3.11 Beim Verschieben eines Shapes wird es auf einen anderen Layer gelegt. Parallel dazu werden die Datenfelder aktualisiert.

Page 21: René Martin Microsoft Visio 2007-Programmierung · Quadrat zu einem Rechteck verzerrt. Nicht so bei Visio. Mit zwei Klicks kann ich die Eigenschaften des Quadrats so verändern,

René Martin

Microsoft Visio2007-Programmierung

ISBN-10: 3-446-41084-8ISBN-13: 978-3-446-41084-8

Leseprobe

Weitere Informationen oder Bestellungen unterhttp://www.hanser.de/978-3-446-41084-8

sowie im Buchhandel

Page 22: René Martin Microsoft Visio 2007-Programmierung · Quadrat zu einem Rechteck verzerrt. Nicht so bei Visio. Mit zwei Klicks kann ich die Eigenschaften des Quadrats so verändern,

501

88 Bewegung in Visio

Sicherlich ist Visio nicht das beste Programm, um Bewegung im Sinne einer Animation oder eines Computerspiels zu erzeugen. Wenn es Ihnen um schnelle Abläufe geht, um frei definierte Pfade, um Bewegung im Internet, dann sind Programme wie Flash oder andere sicherlich besser geeignet. Um einen zentralen Nachteil von Visio zu benennen: Die VBA-Methode DoEvents baut den gesamten Bildschirm auf. Es ist in Visio leider nicht möglich, nur einen Teil des Bildschirms neu zu zeichnen. Jedoch: Um Änderungen von Zuständen in technischen oder naturwissenschaftlichen Zeichnungen zu simulieren, tut Visio gute Dienste.

8.1 Autorennen

An einem kleinen Beispiel soll der Aufbau eines Programms erläutert werden. Es geht dabei um ein Shape, das auf dem Zeichenblatt verschoben wird. Mithilfe der Vorlage „Wegbeschreibung 3D“ wird eine Straße gezeichnet. Dazu wird das Straßen-Shape auf ein Zeichenblatt platziert. Mit gedrückter [STRG]-Taste wird es verschoben und dupliziert. Nun kann dieser Befehl wiederholt werden, sodass eine Straße entsteht. Auf der Straße wird ein Auto bereitgestellt. Im Menü FORMAT | OBJEKTDATEN wird der Name „Auto1“ festgelegt. Seine Lage wird über das Größe- und Position-Fenster bestimmt: Es befindet sich bei (10 mm / 240 mm). Im Code-Editor wird ein neues Modul angelegt – dort wird eine Prozedur erzeugt, mit der auf das Shape zugegriffen wird:

Sub Fahrt()

Dim pagSeite As Page

Dim shpAuto1 As Shape

Set pagSeite = Application.ActivePage

Set shpAuto1 = pagSeite.Shapes("Auto1")

Page 23: René Martin Microsoft Visio 2007-Programmierung · Quadrat zu einem Rechteck verzerrt. Nicht so bei Visio. Mit zwei Klicks kann ich die Eigenschaften des Quadrats so verändern,

8 Bewegung in Visio

502

Abbildung 8.1 Eine Straße mit Auto

Um es zum Fahren zu bringen, müssen die beiden Koordinaten „PinX“ und „PinY“ verändert werden. Da ein Straßen-Shape eine Breite von 20 mm und eine Höhe von 15 mm besitzt, beträgt die Bewegung nach rechts und unten ein Verhältnis 4 : 3. Also könnte gestartet werden:

Sub Fahrt()

Dim pagSeite As Page

Dim shpAuto1 As Shape

Dim i As Integer

Set pagSeite = Application.ActivePage

Set shpAuto1 = pagSeite.Shapes("Auto1")

For i = 0 To 100

shpAuto1.Cells("PinX").Result("mm") = 2 * i + 10

shpAuto1.Cells("PinY").Result("mm") = 240 - i

Page 24: René Martin Microsoft Visio 2007-Programmierung · Quadrat zu einem Rechteck verzerrt. Nicht so bei Visio. Mit zwei Klicks kann ich die Eigenschaften des Quadrats so verändern,

8.1 Autorennen

503

DoEvents

Next

Der Befehl DoEvents ist nötig, damit der Bildschirm sich erneut aufbaut. Wird er weggelassen, so wird zwar das Makro ausgeführt, aber es ist nichts sichtbar. Damit das Auto am Ende wieder zum Ausgangspunkt zurückkehrt, wird es auf die Startposition gesetzt:

shpAuto1.Cells("PinX").Result("mm") = 10

shpAuto1.Cells("PinYY").Result("mm") = 240

Wird die Prozedur aus VBA gestartet, so können Sie leider nichts sehen. Deshalb muss das Makro entweder aus Visio über EXTRAS | MAKRO | BASRENNEN | FAHRT oder über EXTRAS| MAKROS | MAKROS aufgerufen werden. Oder Sie binden es an eine Schaltfläche oder an ein Shape. Neben die Straße wird ein Baum-Shape platziert. Damit das Makro per Doppelklick startet, muss die Datei gespeichert werden und sollte das Modul einen vernünftigen Namen erhalten. Dann kann im Menü FORMAT | VERHALTEN |DOPPELKLICKEN das Makro an das entsprechende Shape gebunden werden. Dies ist wichtig, denn wenn die Datei nicht gespeichert ist, dann lautet die Prozedur beispielsweise:

AutoRennen.basRennen.Fahrt

Ein Speichern der Datei oder ein Umbenennen des Moduls führt dazu, dass das Doppelklickverhalten nicht mehr funktioniert. Dann müsste erneut das korrekte Makro eingestellt werden. Deshalb ist es geschickter, zu Beginn die korrekten Namen zu vergeben. Das Beispiel soll noch um ein zweites Fahrzeug („Auto2“) erweitert werden, das von rechts oben nach links unten fährt. Der ganze Code sieht dann wie folgt aus:

Sub Fahrt()

Dim pagSeite As Page

Dim shpAuto1 As Shape

Dim shpAuto2 As Shape

Dim i As Integer

Set pagSeite = Application.ActivePage

Set shpAuto1 = pagSeite.Shapes("Auto1")

Set shpAuto2 = pagSeite.Shapes("Auto2")

For i = 0 To 100

shpAuto1.Cells("PinX").Result("mm") = 2 * i + 10

Page 25: René Martin Microsoft Visio 2007-Programmierung · Quadrat zu einem Rechteck verzerrt. Nicht so bei Visio. Mit zwei Klicks kann ich die Eigenschaften des Quadrats so verändern,

8 Bewegung in Visio

504

shpAuto1.Cells("PinY").Result("mm") = 240 - i

shpAuto2.Cells("PinX").Result("mm") = 190 - 2 * i

shpAuto2.Cells("PinY").Result("mm") = 230 - i

DoEvents

Next

shpAuto1.Cells("PinX").Result("mm") = 10

shpAuto1.Cells("PinY").Result("mm") = 240

shpAuto2.Cells("PinX").Result("mm") = 190

shpAuto2.Cells("PinY").Result("mm") = 230

End Sub

Wenn Ihnen die Fahrt zu schnell ist, dann könnten Sie die Variable i von Typ Double deklarieren und die Schleife um eine kleinere Schrittweise erhöhen:

Abbildung 8.2 Die beiden Autos rasen über die Straße (i = 45).

Page 26: René Martin Microsoft Visio 2007-Programmierung · Quadrat zu einem Rechteck verzerrt. Nicht so bei Visio. Mit zwei Klicks kann ich die Eigenschaften des Quadrats so verändern,

8.2 Der Viertaktmotor

505

Dim i As Double

...

For i = 0 To 100 Step 0.4

Analog kann man das Auto entlang einer „gekrümmten“ Linie verschieben:

Abbildung 8.3 Das Auto folgt einer Kurve.

8.2 Der Viertaktmotor

Auf einem neuen Zeichenblatt wird ein Objekt gezeichnet, das aus folgenden sechs Teilen besteht, wie Sie in Abbildung 8.4 sehen. Da die „Kurbel“ immer unterhalb des „Deckels“ liegt, werden im ShapeSheet der Kurbel folgende Werte eingetragen: Der „LocPinX“ befindet sich immer in der Mitte:

=GUARD(Width*0,5)

Der „Pin“ wird ans obere Ende platziert, also sitzt der „LocPinY“ auf:

=GUARD(Height)

Die x-Koordinate stimmt mit der des „Deckels“ überein – folglich lautet „DrehbezX“:

=GUARD(Deckel!PinX)

Und die y-Koordinate liegt in einem bestimmten Abstand zum „Deckel“. Also könnte die Formel beispielsweise lauten:

=GUARD(Deckel!PinY-7 mm.)

Page 27: René Martin Microsoft Visio 2007-Programmierung · Quadrat zu einem Rechteck verzerrt. Nicht so bei Visio. Mit zwei Klicks kann ich die Eigenschaften des Quadrats so verändern,

8 Bewegung in Visio

506

Abbildung 8.4 Der konstruierte Viertaktmotor

Damit wird gewährleistet, dass Bewegungen des „Deckels“ auf die „Kurbel“ übertragen werden. Nun kann die Programmierung beginnen. Hinter einer Befehlsschaltfläche liegt folgender Code:

Option Explicit

Private Sub cmdStart_Click()

Dim i As Integer, j As Integer

For j = 1 To 2

For i = 0 To 90

ActivePage.Shapes("Deckel").Cells("PinY").Formula = _

"=" & Chr(34) & -i / 3 + 110 & " mm" & Chr(34)

DoEvents

Next i

Page 28: René Martin Microsoft Visio 2007-Programmierung · Quadrat zu einem Rechteck verzerrt. Nicht so bei Visio. Mit zwei Klicks kann ich die Eigenschaften des Quadrats so verändern,

8.2 Der Viertaktmotor

507

For i = 90 To 0 Step -1

ActivePage.Shapes("Deckel").Cells("PinY").Formula = _

"=" & Chr(34) & -i / 3 + 110 & "mm" & Chr(34)

DoEvents

Next i

Next j

End Sub

Die äußere Schleife wird zweimal ausgeführt, der Deckel dabei nach unten gesenkt und nach oben gehoben. Dies geschieht in der inneren Schleife, die von 0 bis 90 hoch- oder von 90 bis 0 heruntergezählt wird. Nun soll sich die „Kurbel“ bewegen. Da die „Kurbel“ nach links oder rechts bewegt wird, muss über eine Verzweigung abgefragt werden, in welche Richtung der Ausschlag geht. Die rechte Hälfte sieht dann wie folgt aus:

For i = 0 To 90

ActivePage.Shapes("Deckel").Cells("PinY").Formula = _

"=" & Chr(34) & -i / 3 + 110 & " mm" & Chr(34)

If i < 45 Then

ActivePage.Shapes("Kurbel").Cells("Winkel").Formula = _

"=" & Chr(34) & Sin(i * 2 * 3.14159 / 180) * 20 & _

" grad" & Chr(34)

Else

ActivePage.Shapes("Kurbel").Cells("Winkel").Formula = _

"=" & Chr(34) & Cos((i - 45) * 2 * 3.14159 / 180) * _

20 & " grad" & Chr(34)

End If

DoEvents

Next i

Analog auf der anderen Seite: Dort wird der Winkel negativ genommen. Nun soll sich noch das Ventil „Einlass“ in Phase 1 a nach unten bewegen, in Phase 1 b nach oben. Auch

Page 29: René Martin Microsoft Visio 2007-Programmierung · Quadrat zu einem Rechteck verzerrt. Nicht so bei Visio. Mit zwei Klicks kann ich die Eigenschaften des Quadrats so verändern,

8 Bewegung in Visio

508

hier muss abgefragt werden, wo sich der „Deckel“, oder genauer die Zählervariable i, befindet. Der erste Teil sieht nun wie folgt aus:

Private Sub cmdStart_Click()

Dim i As Integer

Dim j As Integer

Dim dblXEinBeginn As Double, dblYBeginn As Double

Dim dblXAusBeginn As Double

dblXEinBeginn = CDbl(Mid(ActivePage.Shapes("Einlass").Cells("PinX") _

.Formula, 1, InStr(1, _

ActivePage.Shapes("Einlass").Cells("PinX").Formula, " ")))

dblYBeginn = CDbl(Mid(ActivePage.Shapes("Einlass").Cells("PinY") _

.Formula, 1, InStr(1, _

ActivePage.Shapes("Einlass").Cells("PinY").Formula, " ")))

dblXAusBeginn = CDbl(Mid(ActivePage.Shapes("Auslass").Cells("PinX"). _

Formula, 1, InStr(1, _

ActivePage.Shapes("Auslass").Cells("PinX").Formula, " ")))

For j = 1 To 2

For i = 0 To 90

ActivePage.Shapes("Deckel").Cells("PinY").Formula = _

"=" & Chr(34) & -i / 3 + 110 & " mm" & Chr(34)

If i < 45 Then

ActivePage.Shapes("Kurbel").Cells("Winkel") _

.Formula = _

"=" & Chr(34) & Sin(i * 2 * 3.14159 / 180) * 20 _

& " grad" & Chr(34)

If j = 1 Then

Page 30: René Martin Microsoft Visio 2007-Programmierung · Quadrat zu einem Rechteck verzerrt. Nicht so bei Visio. Mit zwei Klicks kann ich die Eigenschaften des Quadrats so verändern,

8.2 Der Viertaktmotor

509

ActivePage.Shapes("Einlass").Cells("PinX") _

.Formula = "=" & dblXEinBeginn - i / 10 & " mm"

ActivePage.Shapes("Einlass").Cells _

("PinY").Formula = "=" & dblYBeginn - i / 5 & " mm"

End If

Else

ActivePage.Shapes("Kurbel").Cells("Angle"). _

Formula = "=" & Chr(34) & Cos((i - 45) * _

2 * 3.14159 / 180) * 20 & " grad" & Chr(34)

If j = 1 Then

ActivePage.Shapes("Einlass").Cells("PinX"). _

Formula = "=" & dblXEinBeginn - (90 - i) / 10 & " mm"

ActivePage.Shapes("Einlass").Cells("PinY"). _

Formula = "=" & dblYBeginn - (90 - i) / 5 & " mm"

End If

End If

DoEvents

Next i

Das Ergebnis kann sich sehen lassen:

Page 31: René Martin Microsoft Visio 2007-Programmierung · Quadrat zu einem Rechteck verzerrt. Nicht so bei Visio. Mit zwei Klicks kann ich die Eigenschaften des Quadrats so verändern,

8 Bewegung in Visio

510

Abbildung 8.5 Ein Snapshot bei i = 39

Nun kann noch die Explosion dargestellt werden. Dazu wird ein weiteres Objekt („Flamme“) eingefügt, das dreimal in die Farben Weiß, Gelb und Rot wechselt.

If j = 1 Then

For z = 0 To 3

With ActivePage.Shapes("Flamme") _

.Cells("FillForegnd")

.Formula = "=5": DoEvents

.Formula = "=2": DoEvents

.Formula = "=1": DoEvents

End With

Next

End If

Page 32: René Martin Microsoft Visio 2007-Programmierung · Quadrat zu einem Rechteck verzerrt. Nicht so bei Visio. Mit zwei Klicks kann ich die Eigenschaften des Quadrats so verändern,

8.2 Der Viertaktmotor

511

Abbildung 8.6 Die Explosion

Und schließlich kann man noch die Phasen in einem Textfeld beschreiben:

[...]

For j = 1 To 2

If j = 1 Then

ActivePage.Shapes("Beschreibung").Text = _

"Viertaktmotor Phase 1" & vbLf & "Ansaugen"

Else

ActivePage.Shapes("Beschreibung").Text = _

"Viertaktmotor Phase 3" & vbLf & "Arbeiten"

End If

For i = 0 To 90

[...]

Page 33: René Martin Microsoft Visio 2007-Programmierung · Quadrat zu einem Rechteck verzerrt. Nicht so bei Visio. Mit zwei Klicks kann ich die Eigenschaften des Quadrats so verändern,

8 Bewegung in Visio

512

Abbildung 8.7 Eine Momentaufnahme des fertigen, laufenden Motors bei j = 1 und i = 58

8.3 Planetenumlaufbahn

Werden mehrere Objekte auf dem Zeichenblatt bewegt, die zueinander in einer bestimmten Konstellation stehen (beispielsweise ein Text, der unabhängig vom Shape in einem bestimmten Abstand zu diesem stehen soll), dann kann dies ohne Programmierung im ShapeSheet des entsprechenden Shapes festgelegt werden. Das Objekt, auf das Bezug genommen wird, wird per Namen angesprochen, und durch ein Ausrufezeichen wird der Name der Zelle, auf die referiert wird, festgelegt, beispielsweise:

=Erde!PinY-5 mm

Damit der Anwender nicht versehentlich das Shape verschieben kann, kann die Funktion GUARD verwendet werden:

=GUARD(Erde!PinY-5 mm)

Mit ein wenig elementarer Algebra beziehungsweise Trigonometrie können nun leicht Positionen verändert werden, wie beispielsweise bei den Umlaufbahnen der Planeten.

Page 34: René Martin Microsoft Visio 2007-Programmierung · Quadrat zu einem Rechteck verzerrt. Nicht so bei Visio. Mit zwei Klicks kann ich die Eigenschaften des Quadrats so verändern,

8.4 Fazit

513

Abbildung 8.8 Die Planetenumlaufbahnen können in Visio leicht simuliert werden.

8.4 Fazit

Mit wenig Aufwand kann in Visio eine Zeichnung erstellt werden. Mit geringen VBA-Kenntnissen kann auf die Shapes zugegriffen werden. Sie können in ihrer Position und in ihrem Aussehen verändert werden. Parallel dazu können Texte platziert und ausgeblendet werden. Damit können leicht und schnell dynamische Verläufe aus den Bereichen Technik, Pneumatik und Hydraulik, Kybernetik, Naturwissenschaft, Astronomie ... dargestellt werden.

Page 35: René Martin Microsoft Visio 2007-Programmierung · Quadrat zu einem Rechteck verzerrt. Nicht so bei Visio. Mit zwei Klicks kann ich die Eigenschaften des Quadrats so verändern,