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
Schriftfeld20151014_1
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.

Schriftfeld20151014_2

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.

Der Block wird herausgezogen
Der Block wird herausgezogen

Hyperlink

Heute fragte ein Teilnehmer in der Visio-Schulung, ob man auf eine andere Visio-Datei und dort auf ein bestimmtes Zeichenblatt verlinken kann. „Klar“ lautet die Antwort. Sobald die Datei ausgewählt wurde, zeigt Visio die Namen der einzelnen Zeichenblätter an.

Hyperlink auf Adresse und Unteradresse
Hyperlink auf Adresse und Unteradresse

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.

Das Andockfenster wird geöffnet.
Das Andockfenster wird geöffnet.

Layer verschwinden?

Eine interessante Sache, die mir bislang nicht aufgefallen ist.
Für eine Vorlage habe ich einen Anmerkungsblock erstellt. Damit niemand diesen Block ändert, löscht oder verschiebt, habe ich ihn auf einen Layer(block) gelegt. Und diesen gesperrt.

Die Anmerkungen liegen auf einem Layer. Dieser ist gesperrt.
Die Anmerkungen liegen auf einem Layer. Dieser ist gesperrt.

Eigentlich wäre es praktisch, dachte ich mir, diesen Layer auch für den Rahmen zu verwenden. Erstaunlicherweise taucht der Layername „block“ in der Liste der Layer nicht auf. Ein neues Anlegen wird mit einer Fehlermeldung quittiert.

Geht nicht!
Geht nicht!

Also: Layer entsperren, nun kann er zugewiesen werden und anschließend den Layer wieder mit einem Schutz versehen.

Geht doch!
Geht doch!

Geht doch! Aber gewundert habe ich mich schon ein bisschen.

Daten suchen

Auch schade:
An eine Visio-Zeichnung wird eine Excel-Tabelle mit zirka 10.000 Datensätzen gebunden. Damit man den richtigen Datensatz an das entsprechende Shape ziehen kann, wäre eine Suchfunktion in den externen Daten schön. Gibt es aber leider nicht ….

Daten20150921_2

Daten verknüpfen

Verknüpft man in eine Access-Datenbank Tabellen aus einer anderen Datenquelle (beispielsweise einer anderen Access-DB oder dem SQL-Server), dann können die Daten nicht an eine Visio-Zeichnung verknüpft werden.

Daten20150921

Zufallskunst

Ein paar Zeilen Code und schon entsteht ein „Zufallskunstwerk“.
Auf die Idee hat mich François Morellet gebracht – mit seiner Ausstellung in Caen.
Und hier der Code:
Dim i As Integer

ActiveWindow.SelectAll
ActiveWindow.Selection.Delete

Randomize

For i = 1 To 100
ActivePage.DrawLine 8.2 * Rnd, 8.2 * Rnd, 8.2 * Rnd, 11.8 * Rnd
Next

ActiveWindow.DeselectAll

Zufallskunst
Zufallskunst

Steuerelemente / Controls

Eine Firma möchte für Ihre technischen Zeichnungen einen Funktionsrahmen haben. Er soll jedoch nicht nur als Rechteck dargestellt werden, sondern möglicherweise Ausbuchtungen besitzen.
Nun – ein paar Zeilen Code im ShapeSheet und einige Steuerelemente ermöglichen dies.

Der Rahmen kann durchaus ein paar "Dellen" haben.
Der Rahmen kann durchaus ein paar „Dellen“ haben.

Funktionsrahmen20150904_1

Animation mit Visio

Ein bisschen Spielerei, ein paar Zeilen Code.
Ja, ja, ich weiß: Visio ist sicherlich nicht das beste Programm, um solche „Zeichnungen“ zu animieren. Dennoch: wer den Code einsehen möchte: (in der Routine „Verzögern“ ist eine Schleife und der Befehl DoEvents eingebaut – sonst wäre das Glas zu schnell fertig).


Set vsShape = ActivePage.DrawRectangle(2, 2, 6, 8)
With vsShape
.Cells(„Geometry1.Y3“).FormulaU = „=Width*0“
.Cells(„Geometry1.Y4“).FormulaU = „=Width*0“
.Cells(„Geometry1.X5“).FormulaU = „=Width*0“
.Cells(„Geometry1.Y5“).FormulaU = „=Height*0“

ActiveWindow.DeselectAll: Verzögere

.Cells(„Geometry1.NoFill“).FormulaU = „=True“
.Cells(„Geometry1.X1“).FormulaU = „=Width*0.6“
.Cells(„Geometry1.Y1“).FormulaU = „=Height*0.1“: Verzögere
.Cells(„Geometry1.X2“).FormulaU = „=Width*1“
.Cells(„Geometry1.Y2“).FormulaU = „=Height*0“
.Cells(„Geometry1.X3“).FormulaU = „=Width*0“
.Cells(„Geometry1.Y3“).FormulaU = „=Height*0“
.Cells(„Geometry1.X4“).FormulaU = „=Width*0.5“
.Cells(„Geometry1.Y4“).FormulaU = „=Height*0.15“: Verzögere
.Cells(„Geometry1.X5“).FormulaU = „=Width*0.5“
.Cells(„Geometry1.Y5“).FormulaU = „=Height*0.6“: Verzögere
.AddRow visSectionFirstComponent, 6, visTagLineTo
.Cells(„Geometry1.X6“).FormulaU = „=Width*0“
.Cells(„Geometry1.Y6“).FormulaU = „=Height*1“
.AddRow visSectionFirstComponent, 7, visTagLineTo
.Cells(„Geometry1.X7“).FormulaU = „=Width*0.5“
.Cells(„Geometry1.Y7“).FormulaU = „=Height*0.6“: Verzögere
.AddRow visSectionFirstComponent, 8, visTagLineTo
.Cells(„Geometry1.X8“).FormulaU = „=Width*1“
.Cells(„Geometry1.Y8“).FormulaU = „=Height*1“
.AddRow visSectionFirstComponent, 9, visTagLineTo
.Cells(„Geometry1.X9“).FormulaU = „=Width*0.75“
.Cells(„Geometry1.Y9“).FormulaU = „=Height*0.8“: Verzögere
.AddRow visSectionFirstComponent, 10, visTagLineTo
.Cells(„Geometry1.X10“).FormulaU = „=Width*0.25“
.Cells(„Geometry1.Y10“).FormulaU = „=Height*0.8“: Verzögere

intAbschnitt = .AddSection(visSectionLast)

.AddRow intAbschnitt, visRowComponent, visTagComponent
.AddRow intAbschnitt, 1, visTagRelMoveTo
.AddRow intAbschnitt, 2, visTagEllipticalArcTo
.Cells(„Geometry2.X1“).FormulaU = „=0.5“
.Cells(„Geometry2.Y1“).FormulaU = „=1“
.Cells(„Geometry2.X2“).FormulaU = „=Width*0.125“
.Cells(„Geometry2.Y2“).FormulaU = „=Height*0.65“
.Cells(„Geometry2.A2“).FormulaU = „=-Width*0.25“
.Cells(„Geometry2.B2“).FormulaU = „=Height*1“
.Cells(„Geometry2.NoFill“).FormulaU = „=True“: Verzögere

.Cells(„LineWeight“).FormulaU = „=30 pt“

End With