Kategorie: VBA
Kommentare in Visio
QuickInfo programmieren
Formula und FormulaForce
Hallo Herr Martin,
Nun habe ich doch eine Frage.
Ich experimentiere gerade mit der GUARD – Funktion. Ziel ist es die Shapes auf dem Hintergrund zu sichern.
Die Funktion „Schutz“ über das Entwicklermenü ist nicht mehr wirklich eine Hürde für meine Kollegen. Daher soll nun GUARD ins Spiel kommen.
Mein Problem ist nun wie folgt:
Ich habe zwei kleine Scripte, welches den Schutz setzt und wieder aufheben soll. Siehe Anhang
Das Setzen des Schutze geht wunderbar.
Das Rücksetzen wird immer mit dieser Fehlermeldung quittiert:
Hallo Herr H.,
das ist eine leichte Frage – Sie müssen die Eigenschaft FormulaForceU statt FormulaU verwenden.
Werfen Sie mal einen Blick in mein Buch – dort liste ich dir Unterschiede zwischen
Formula, FormulaU, FormulaForceU, Result, … auf .
Mastershapes in einer Schablone
Dynamische Schaltflächen auf einem Zeichenblatt
Die API-Hölle
Länge einer Linie: LengthIU
Folgende Zeilen Code berechnen die Länge einer Linie:
Sub LängeAnzeigen()
Const ShapeLinieAnzeigen As String = „Dynamischer Verbinder“
Dim i As Long
For i = 1 To ActivePage.Shapes.Count
If ActivePage.Shapes(i).Name Like „*“ & ShapeLinieAnzeigen & „*“ Then
ActivePage.Shapes(i).Text = Format(Application.ConvertResult(ActivePage.Shapes(i).LengthIU, „in“, „mm“), „0.00“)
End If
Next i
End Sub
Erklärung: Die Eigenschaft LengthIU liefert die Länge – allerdings in inch. Sie muss in cm oder m umgewandelt werden. Dies kann die Funktion Application.ConvertResult. Und dieses Ergebnis wird mit der Funktion Format auf zwei Stellen nach dem Komma formatiert: „0.00“. Und diese Ergebnis wird auf das Shape als Text geschrieben. Auf welches Shape?
Eine Schleife durchläuft alle Shapes und schreibt den Text jeweils auf die „Dynamischen Verbinder“.
Für Ihre Fluchtwege können Sie den Code anpassen. Erstellen Sie ein Mastershape „Fluchtweg“ in einer Schablone, ziehen es aufs Zeichenblatt (formatieren es, machen es transparent …). In Entwicklertools / Shape-Name befindet sich ja der Name – beispielsweise „Fluchweg“ oder „Fluchtweg.24“ Wenn die Konstante in „Fluchtweg“ geändert wurde, wenn Sie die Formatierung auf „m“ ändern, dann liefert der folgende Code:
Sub LängeAnzeigen()
Const ShapeLinieAnzeigen As String = „Fluchtweg“
Dim i As Long
For i = 1 To ActivePage.Shapes.Count
If ActivePage.Shapes(i).Name Like „*“ & ShapeLinieAnzeigen & „*“ Then
ActivePage.Shapes(i).Text = Format(Application.ConvertResult(ActivePage.Shapes(i).LengthIU, „in“, „m“), „0.00“)
End If
Next i
End Sub
die Länge des Fluchtwegs (hier: 77,13 – schließlich muss man noch nachsehen, wenn beim Billard gewonnen hat, bevor man in die Raucherecke geht)
Wechseln Sie zu VBA. Erstellen dort ein Modul. Und fügen den Code von oben ein. Sie können diese Datei als VSDM speichern – oder die Vorlage als VSTM (Mit Makros!). Das Programm wird von Visio über Ansicht / Makros ausgeführt.
Suchen
Die Tastenkombination Strg + F zum Suchen ist hinlänglich bekannt. Sie funktioniert in allen Anwendungsprogrammen, die ich kenne, in allen Browsern, pdf-Programmen (allerdings leider nicht in Outlook). Aber in Visio.
Meistens werden Sie dort nach bestimmten Texten suchen.
Für die Programmierung ist es enorm wichtig, dass man auch nach Shape-Namen suchen kann. Also beispielsweise das Shape Sheet.18727. Der Name wird durch den (VBA-)Code ermittelt.