Wetterbericht von Frankreich. Gesehen auf einer Postkarte irgendwo in der Normandie. Die Symbole für Sonne und Regen finden sich in der Schablone „Visio-Extras/Symbole“
Kategorie: Blog: Der Visio Guru
Linienmuster
Lieber Rene,
ich hoffe Dir geht es gut und Du hast nur liebe und nette Seminarteilnehmer. Bei mir ist es jetzt ein wenig ruhiger geworden, aber alles passt.
Hatte gestern und vorgestern ein Visio-Seminar bei einem Kunden mit Elektronikschaltplänen. Alles soweit gut. Sie wollen aber gerne die Verkabelung mit den Drahtfarben darstellen. Nur: einige der Drähte sind zweifarbig. Wie lassen sich Verbinder zweifarbig darstellen.
Habe es mit zwei Verbindern versucht: einer z.B. rot massiv, zweiter blau gestrichelt. Dann verliert aber nach dem Gruppieren der Verbinder seine Verbindereigenschaften. Ist so etwas überhaupt möglich?
Vielen Dank für Deine Mühe und viele Grüße
W
#####
Hallo W.,
[…]
Zu deiner Frage: Wenn du zwei Shapes gruppierst, hast du danach drei Shapes. Visio legt eine „Hülle“ über die beiden Shapes. Und dieses Gruppenshape ist natürlich kein Verbinder.
Die Lösung;: du musst ein benutzerdefiniertes Linienmuster erstellen (kannst du?). Und dieses an eine/die Vorlage hängen.
Dann geht es.
Schöne Grüße
Rene
Daten mit Shapes verbinden
Schade eigentlich. Ist mir bislang noch nicht aufgefallen. Befindet sich ein Shape in einer Gruppe, wie beispielsweise der Luftfilter, dann ist es nicht möglich ein Datensatz aus einer verknüpften Tabelle an das Mitgliedsshape zu binden. Das bedeutet: Man darf hierfür nicht gruppieren.
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.
Daten
Haben Sie auch zu viel Geld? Richtig – es wird immer schwieriger eine Steueroase zu finden, in der man sein Geld verstecken kann. Schnell ein Rechteck erstellt, auf einen Layer gelegt, mit einem Datenfeld versehen und die 30 Länder eintragen. Der Assistent Überprüfen / Shape-Berichte sammelt die Ländernamen ein.
Zum Glück gibt es noch ein paar Steueroasen – auch wenn die meisten von ihnen in der Karibik liegen.
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.
Automatischer (automatisierter) Start einer Datei
Hallo Herr Martin,
zum Zweck:
Ich glaube schon, dass es für einen Nutzer ganz praktisch ist, wenn ein Programm (sei es z.B. ein Bildbetrachtungsprogramm mit unterlegten Texten u. vieles mehr) sich direkt aus der Windowsoberfläche starten lässt – und dann direkt ins Vollbild.
So sind ja nur noch die Button und die programmtechnischen Funktionen aktiv. Alles andere ist gesperrt.
Das Vollbild im Programm aufzurufen ist inzwischen mit ‚ SendKeys „{F5}“ ‚ unproblematisch.
Der Automatikstart dagegen noch nicht.
Ein Durchstarten aus der Windowsoberfläche gelingt mir für ein einfaches Visio-Programm mit der im Internet gefundenen Aufrufzeile:
Private Sub Document_DocumentOpened(ByVal doc As IVDocument)
‚hier der gewünschte Programmaufruf z.B. Call Hauptprogramm
End Sub
Bei meinem komplexeren Programm startet das Programm jedoch ins Nirwana.
Können Sie mir erklären, wie dies überhaupt funktioniert? Welche Randbedingungen gibt es? Was kann falsch laufen?
####
Hallo Herr F.,
Sie dürfen den Code nicht in Modul einfügen, sondern müssen im VBA-Editor unter
ThisDocument
auf der Liste der Objekte das Objekt „Document“ auswählen. Dann erscheint das Ereignis „Open“ (weitere Ereignisse rchts oben in der Dropdownliste):
Dann klappt es (möglicherweise müssen Sie noch die Makros aktivieren oder in Vertrauensstellungscenter etwas ändern. Und: nicht vergessen: Die Datei von Typ *. vsdm“ (mit Makros) zu speichern
schöne Grüße
Rene Martin
Daten ändern
Sehr geehrter Herr Dr. Martin
Ich habe mal wieder ein Problem:
Kann man Shapes, die in einer Schablone abgelegt sind, externe Daten zuweisen ohne sie auf die Arbeitsfläche zu ziehen?
Mein Problem ist folgendes:
Ich habe bereits etliche Shapes gezeichnet, die in späteren Zeichnungen enthalten sein werden. Zu der Zeichnung sollen dann Berichte erstellt werden, in denen die vervendeten Shapes mit Stückzahl und verschiedenen Eigenschaften wie Artikelnummer und Preis aufgelistet werden.
Um nun nicht jedes Shape auf die Arbeitsfläche ziehen zu müssen, die externen Daten zuzuweisen und dann in die Schablone zurückspeichern zu müssen bin ich an einer eleganteren Lösung interessiert.
Viellleicht können sie helfen:
Mit freundlichen Grüßen
WS.
######
Sehr geehrter Herr S,,
es gibt zwei Lösungen für Ihr Problem: Sie können die Schablone, die Sie erstellt haben zur Bearbeitung öffnen (Kontextmenü):
Und dem Master-Shape neue Daten hinzufügen. Fenster schließen, bestätigen.
Oder Sie ziehen alle Shapes auf das Zeichenblatt. Anschließend weisen Sie einem Shape die Daten zu. Über das Kontextmenü des Aufgabenbereichs „Shapedaten“ können Sie die Daten in den Shape-Datensätzen „kapseln“. Dann können Sie diese Daten auf alle Shapes (mit einem Klick) übertragen. Dann wieder zurückziehen und umbenennen.
Alle Shapes durchlaufen
Eine rekursive Funktion zu schreiben, die alle Shapes (auch die Shapes in Gruppen) auflistet, ist nicht sehr schwierig:
Private Sub BistDuGruppe(vsshape As Visio.Shape)
Dim i As Long
ReDim Preserve lngShapeID(UBound(lngShapeID) + 1) ‚ — vergrößere die Dimension
lngShapeID(UBound(lngShapeID)) = vsshape.ID
If LiegstDuAufRichtigemLayer(vsshape) = False Then
For i = 1 To vsshape.Shapes.Count
Call BistDuGruppe(vsshape.Shapes(i))
Next i
End If
End Sub
Sie wird von außen aufgerufen:
For i = 1 To vsBlatt.Shapes.Count
Call BistDuGruppe(vsBlatt.Shapes(i))
Next i
Allerdings benötige ich die X- und die Y-Position der Shapes. Dabei fällt auf, dass der Wert des Result der Zelle PosX und PosY in Relation zum übergeordneten Shape berechnet wird und nicht die Absolut-Koordinten des Zeichenblattes widergibt. Also muss man auf das „Chef“-Shape zugreifen:
Private Function WerIstBossVonGruppe(vsshape As Visio.Shape) As String
Dim vsShapeTemp As Visio.Shape
Set vsShapeTemp = vsshape
If TypeName(vsshape.Parent) = „Shape“ Then
Set vsShapeTemp = vsBlatt.Shapes(WerIstBossVonGruppe(vsShapeTemp.Parent))
End If
WerIstBossVonGruppe = vsShapeTemp.Name
End Function
Wenn ein Shape Teil einer Gruppe ist, dann liefert TypeName(vsshape.Parent) die Info „Page“.
Quickinfo
Das ist lustig … das ist mir noch nie aufgefallen. Wenn man mehrere Shapes gruppiert, so werden die Quickinfos von allen Mitgliedsshapes angezeigt, wenn der Mauszeiger darüberfährt.