Messstelle

Hallo Herr Martin,

nach einer längeren Pause beschäftige ich mich wieder mit AVEVA Diagrams bzw. Visio.

Ich möchte ein Shape für eine Messstelle zeichnen, das aus 4 Linien mit round=5 (Kreis) und einer Führungslinie besteht.

Wenn ich den Griffpunkt der Führungslinie nach rechts bewege, soll die Führungslinie am Quadrantenpunkt des Kreises (x=10, y=5) beginnen und horizontal bis zum Griffpunkt laufen. Links analog.

Wenn ich den Griffpunkt der Führungslinie nach unten bewege, soll die Führungslinie am Quadrantenpunkt des Kreises (x=5, y=0) beginnen und vertikal bis zum Griffpunkt laufen. Oben analog.

Ideal wäre, wenn die Führungslinie sich nur in den 4 gewünschten Richtungen zeigt und an den 4 Quadrantenpunkten des Kreises verankert und keine Zwischenpositionen oder -winkel einnehmen würde.

Haben Sie zu dieser Aufgabenstellung eine Idee oder ein Beispiel?

Hallo Herr M.,

so funktioniert es:

* Erstellen Sie einen Kreis. Wechseln Sie in das ShapeSheet. Schalten Sie dort im Abschnitt „Protection“ den LockAspect auf

=GUARD(1)

So bleibt er ein Kreis.

* Fügen Sie eine zweite Geometriesektion hinzu, in der Anfang und Ende in die folgenden Zeilentypen geändert werden:

MoveTo und LineTo

* Fügen Sie einen weiteren Abschnitt „Controls“ hinzu.

* Damit man den Kontrollpunkt nicht aus dem Shape herausziehen kann, wird in einer User-defined cell die Begrenzung festgelegt:

=IF(Controls.Row_1.Y>Height,SETF(„Controls.Row_1.Y“,Height),0) und

=IF(Controls.Row_1.Y<0,SETF(„Controls.Row_1.Y“,0),0)

* Das Ende der Linie, also x und y, verweisen auf das Control:

=Controls.Row_1 und

=Controls.Row_1.Y

Der y-Anfangspunkt hat die gleich y-Koordinate wie das Ende:

=Geometry2.Y2

* Bei x ist ein wenig Rechnung nötig:

=SQRT((Width/2)^2-(Width/2-Geometry2.Y1)^2)+Width/2

Der Grundgedanke ist die Formel des Kreises: x² + y² = 1

Für die linke Seite analog:

IF(Controls.Row_1>Width/2,SQRT((Width/2)^2-(Width/2-Geometry2.Y1)^2)+Width/2,-SQRT((Width/2)^2-(Width/2-Geometry2.Y1)^2)+Width/2)

Damit man bequem zwischen horizontal und vertikal umschalten kann, wird ein Abschnitt „Action“ eingefügt. In einer benutzerdefinierten Zelle wird festgelegt:

=“1 = horizontal // 2 = vertikal“

Darauf wird Bezug genommen:

* Das Menü der ActionZeile zeigt an:

=IF(User.horizontal=1,“vertikal“,“horizontal“)

* die Action selbst schaltet um:

=IF(User.horizontal=1,SETF(„User.horizontal“,2),SETF(„User.horizontal“,1))

* Die Zelle Geometry2.NoLine belndet ein oder aus:

=User.horizontal<>1

* und nun kann der dritte Geometrieabschnitt erzeugt werden, in dem Bezug genommen wird:

IF(Controls.Row_2.Y>Height/2,SQRT((Height/2)^2-(Height/2-Geometry3.X1)^2)+Height/2,-SQRT((Height/2)^2-(Height/2-Geometry3.X1)^2)+Height/2)

 

Mehrsprachigkeit

Ein interessanter Beitrag von David Parker zum Thema Mulilanguage in Visio:
 
https://bvisual.net/2021/11/12/have-multiple-alternate-languages-in-the-same-visio-diagram/?utm_source=rss&utm_medium=rss&utm_campaign=have-multiple-alternate-languages-in-the-same-visio-diagram

Legende

Guten Morgen Herr Martin,
voriges Bild habe ich erzeugt. Die Datenquelle ist Verkaufsdaten.xlsx. Woher bezieht Visio die Umsatz-Summe in der Legende? Vielen Dank für ihre Hilfe.
####
Hallo Herr K.,
die Umsatzzahlen kommen aus der letzten Spalte „Umsatz“
####
Hallo Herr Martin,
ich habe eine unpräzise Frage gestellt. Deshalb ein neuer Versuch:
Woher die 22500 kommen ist klar. Aber woher und warum ist der Max-Wert bei 30000? Wenn ich diesen verändere, ändert sich auch der Wert in der Legende. Welchen Wert hat für mich diese Angabe?
####
Hallo Herr K.,
könnten Sie bitte beschreiben, was Sie machen. Ich verstehe Ihre Frage „woher und warum ist der Max-Wert bei 30000? Wenn ich diesen verändere, ändert sich auch der Wert in der Legende. Welchen Wert hat für mich diese Angabe?“ nicht.
####
Guten Tag Herr Martin,
ich gehe folgendermaßen vor:
Schritt 1: leeres Zeichenblatt, dann das Rechteck aus den Standard-Shapes
Schritt2: Verbindung mit der Excel-Tabelle Verkaufsdaten.xlsx
Schritt 3: Ich ziehe einen Datensatz auf das Rechteck –> bis hierher keine Probleme
aber jetzt:
Schritt 4: Einblenden der Legende, automatisch erscheint das Feld „Umsatz“ mit 22500
Schritt 5: Anzeigen von ShapeSheet (Entwicklertools) für das Feld Umsatz
Schritt 6: Kontrolle der 22500 –> Wird automatisch berechnet nach beiliegender Formel im Bereich Shape Data
0.75*(Prop.msvCalloutPropMax-Prop.msvCalloutPropMin)+Prop.msvCalloutPropMin (Die Werte von …min (0) und …max (30000) sind voreingestellt von Visio)
Ich kann die Werte von Hand ändern, das Ergebnis wird angepasst, aber was kann ich mit diesem Wert anfangen? Dieser hat offensichtlich keinen Bezug zu den Tabellendaten.
####
Hallo Herr K.,
danke – jetzt verstehe ich. Ich bin davon ausgegangen, dass Sie die Vorlage Pivotdiagramm verwendet hatten …
Die Antwort: es ist eine Beispielzahl, die in der Legende angezeigt wird. Der Balken weist darauf hin, dass in der Datengrafik Umsatz verwendet wird (und nicht die Menge) – ändern Sie es, erzeugen Sie die Legende erneut und Sie sehen Menge statt Umsatz.
Ändern Sie Datenbalken durch Wert als Farbe, wird dies angezeigt.
Der (Dummy)-Wert, den Sie sehen, ist ein berechneter Wert zwischen Min und Max – aber nicht der Mittelwert, sondern im oberen Viertel.
Legende ist ja nur eine Erklärung, was die Symbole bedeuten mit einem Beispiel, kein Auswertungsergebnis.
####
Hallo Herr Martin,
vielen Dank für die Unterstützung. Es ist schon merkwürdig, welche Mühe mit einer Formel sich MS macht, um einen Beispielwert anzuzeigen. Ein Festwert hätte es auch getan.
####
Hallo Herr K.,
 
ich gebe Ihnen recht: sehr viel Mühe und vielleicht verwirrend.
Andererseits: Würde Microsoft den Wert 42 auf den Balken schreiben, würden sich Anwender sicherlich wundern, warum gerade diese Zahl, wo doch der Datenbereit zwischen 0 und 0,005 liegt. Oder zwischen 100.000 und 10.000.000.
 
Liebe Grüße
 
Rene Martin
 
 
 

Schutz in Visio

Eine Firma hat sehr viele eigene Shapes erstellt. Und möchte diese Shapes schützen.
Das geht nicht: Visio bietet keinerlei „sichere“ Schutzmechanismen, als Techniken, die man nicht knacken kann. Alles ist offen und einsehbar.
Wir überlegen zusammen:
Man könnte einen Verweis auf die Vorlage setzen und dort auf eine Zelle zugreifen. Wenn diese Zelle nicht existiert, soll das Shape ausgeblendet werden. Gute Idee, denke ich und probiere aus.
Das Problem: verweist ein Shape auf eine Zelle des Dokuments, wird das Shape in ein anderes Dokument kopiert, wird auch die Zelle des Dokuments mitkopiert. Damit ist diese Überprüfung obsolet.
Also wird es wohl doch beim Copyright bleiben …

Linien und Steuerelemente

Faciplan möchte Symbole für Fluchtpläne, Feuerlöscher, Defibrillatoren, … in die Raumpläne, die mit Visio gezeichnet sind, einfügen. Da nicht immer genügend Platz an der Stelle ist, an der sie platziert werden sollen, schlage ich vor mit einer knickenden Linie zu arbeiten – über Steuerelemente wird der Lauf festgelegt.
Und: über das Kontextmenü kann man sie ausblenden.
Die Lösung gefällt!

Gruppe in der Gruppe in der Gruppe …

Hallo Herr H.
ist das gemein oder einfach nur böse?
####
So begann meine Mail. Warum mein Erstaunen?
Es begann so:
Sehr geehrter Herr Martin,
 
ich stehe vor einem mittelschweren VBA- Problem und hoffe sehr, dass Sie mir hier wieder weiterhelfen können.
 
Folgendes Problem:
 
Ich habe tagtäglich mit unzähligen gruppiertes Shapes zu tun die ich per Excel Tabelle mit Adressdaten und Daten befülle.
 
Ab Spalte L2:L in der Excel Tabelle soll sich in Abhängigkeit des Textinhaltes (Ventil, Pumpe, Speicher) die Linien -Farbe des
Shapes ändern („Linecolor“) von Ventil = Grau, Pumpe = Blau und Speicher = grün. (siehe beiliegende Excel Mappe)
 
For Each shpInneresShape In shp.Shapes
If shpInneresShape.Name = „V“ Then
shpInneresShape.Text = blatt.Cells(i, 6).Value ‚Anzahl V
ElseIf shpInneresShape.Name = „P“ Then
shpInneresShape.Text = blatt.Cells(i, 7).Value ‚ ID
[…]
Ich hoffe sehr, dass Sie mir in diesem Problem weiterhelfen können.
###
Ich schaue mir das Problem an und schreibe:
Hallo Herr H.,
 
so wie Sie die Dateninformation Prop.P_ID überprüfen, können Sie auch die Linienfarbe LineColor setzen:
 
If blatt.Cells(i, 12).Value = “Ventil” then
shpInneresShape.Cells(„LineColor“).FormulaU = „=17“
ElseIf blatt.Cells(i, 12).Value = “Pumpe” then
shpInneresShape.Cells(„LineColor“).FormulaU = „=4“
ElseIf blatt.Cells(i, 12).Value = “Speicher” then
shpInneresShape.Cells(„LineColor“).FormulaU = „=3“
End If
 
Für Grau stehen Ihnen die Zahlen zwischen 14 und 20 zur Verfügung. Ich verwende gerne diese „alten“ Zahlen (sie stammen aus einer sehr alten Visio-Version) – Alternativ können Sie auch die Funktion RGB verwenden (ist aber umständlicher).
####
Hallo Herr Martin,
Vielen herzlichen Dank für Ihre schnelle Antwort 😊!!
Leider funktioniert die Farbänderung noch nicht wirklich – ich habe anbei eine Beispiel Visio Datei angefügt.
####
Hallo Herr H.,
ist das gemein oder einfach nur böse?
Im Ernst:
1.) in der Zelle L3 steht nicht „Ventil“, sondern „Ventil “ (ein Leerzeichen am Ende). Deshalb habe ich die Zeile
 
ElseIf blatt.Cells(i, 12).Value = „Ventil“ Then
 
geändert in:
 
ElseIf blatt.Cells(i, 12).Value Like „Ventil*“ Then
 
2.) Sie habe eine Gruppe in der Gruppe in der Gruppe in der Gruppe! Eine Gruppe hat keine Linie. Also habe ich alle Kinder und Enkel und Urenkel … formatiert.
Dann klappt es!
 
Liebe Grüße
 
Rene Martin
 
PS: ich habe auch noch ein Option Compared Text eingefügt, damit nicht zwischen Groß- und Kleinschreibung unterschieden wird.
 
Der Code:
[…]
If blatt.Cells(i, 12).Value Like „Ventil*“ Then
shpInneresShape.Cells(„LineColor“).FormulaU = „=17“ ‚ — grau
Call MacheInnenBunt(shpInneresShape, 17)
ElseIf blatt.Cells(i, 12).Value Like „Pumpe*“ Then
shpInneresShape.Cells(„LineColor“).FormulaU = „=4“ ‚ — blau
Call MacheInnenBunt(shpInneresShape, 4)
ElseIf blatt.Cells(i, 12).Value Like „Speicher*“ Then
shpInneresShape.Cells(„LineColor“).FormulaU = „=3“ ‚ — grün
Call MacheInnenBunt(shpInneresShape, 3)
End If
 
[…]
Sub MacheInnenBunt(vsShape As Shape, Farbe As Integer)
Dim i As Integer
For i = 1 To vsShape.Shapes.Count
vsShape.Shapes(i).Cells(„LineColor“).FormulaU = „=“ & CStr(Farbe)
If vsShape.Shapes(i).Shapes.Count > 0 Then
Call MacheInnenBunt(vsShape.Shapes(i), Farbe)
End If
Next
End Sub
 
 
 

Data Visualizer

Lieber Rene,
 
Ich brauch für einen Kunden den DataVisualiser und hab ihn noch nie zuvor benutzt. In deinem Video und im Internet
ist das super erklärt und funktioniert auch gut. Aber mein Kunde hat nun die Frage, ob man da auch in die Excel-Tabelle einen Link eintragen kann mit einer Zieldatei, die dann automatisch mit dem zugewiesenen Shape verknüpft ist. Geht so was??? Hintergrund: Die Daten, die in Excel eingegeben werden, werden von einer anderen Abteilung eingetragen. Diese haben kein Visio. Die Dame, die das Visio macht, will aber in der Zeichnung nicht manuell die Links
einfügen, da es sehr grosse Diagramme sind. Die Dame kann keine Programmierung – d.h. nur wenn es mit einfachen Mitteln geht oder ob es überhaupt geht wäre für mich interessant zu wissen. Ich selber schule zwar Visio – aber auch nur im Anwenderbereich und bisher brauchte ich die Funktion noch nicht.
 
Wäre super, wenn du mir in 1-2 Sätzen einfach sagen könntest, ob das ohne Aufwand geht oder nicht bzw. ob Du so was schon mal ausprobiert hast 😉
 
Liebe Grüsse
Barbara
Hi Barbara,
 
kurz und knapp: das geht nicht!
Diese Assistenten müsste man aufbohren – und das geht nicht.
 
Man müsste eigene Shapes bauen, die importierte Daten als Link anzeigen. Und dies statt der Visio-Shapes verwenden. Nicht ganz trivial.
Oder den Workflow nachbauen – importiere nicht nur die angezeigten Texte, sondern auch Texte, die zu Links werden.
 
Tja!
 
Liebe Grüße
 
Rene

Dokument durchrechnen

Hallo!
 
Ich möchte in Visio Abläufe darstellen und diese Abläufe zeitlich bewerten. Dazu wäre es sehr hilfreich, wenn die Shapes einen benutzerdefinierten Wert besitzen welche durch die Verbindungslinien immer wieder aufsummiert werden. Als Beispiel habe ich ein Bild angehängt. Geht das in Visio bzw. gibt es hier schon Lösungen?
 
Wäre schön wenn Sie mir kurz Antworten können.
 
Wünsche noch ein schönes Wochenende!
 
mfg
Hallo Herr E.,
 
kennen Sie das ShapeSheet? Man müsste dort auf der Linie zwischen 5 und 6 den Wert 5 „holen“:
In einer benutzerdefinierten Zelle oder einem Datenfeld kann man mit
=FORMAT(EVALCELL(BeginX),“@“)
den Namen des Shapes herauslösen. Okay – ein paar Funktionen fehlen noch. Dann müssten Sie den mit dem Namen einen Bezug auf seinen Text (5) herstellen:
=SHAPETEXT(AnderesShape!TheText)
Damit ist der Text, also die Nummer 5, in der Linie bekannt. Sie müsste weitergereicht werden an das Shape mit dem Wert 6. Das heißt: sie benötigen zwei verschiedene Shapes: für die Werte und die Summe und müssten Sie zwei unterschiedliche Shapes bereit stellen. Für den Verbinder ein drittes.
Abgesehen davon, dass es sehr mühsam ist, bin ich nicht sicher, ob es wirklich funktioniert.
 
Visio selbst hat an einigen Stellen Assistenten zur Verfügung gestellt, die auf Ereignisse reagieren.
 
Ich habe schon mehrmals Vorlagen für Firmen erstellt, in denen ich das „durchrechne“: in den Linien ist bekannt, an wem sie kleben (siehe oben). Und so können dann die Texte „weitergereicht“ werden.
 
Ich würde es programmieren.
 
Zu Ihrer Frage: m.W. gibt es DAFÜR noch keine Lösung.
 
Hilft Ihnen das?
 
Liebe Grüße
 
Rene Martin

Shape ersetzen

Hallo Herr Martin,
ich versuche mich die ganze Zeit an VBA und habe schon viele erfolge durch Ihre Lektüre.
Ein Problem habe ich noch welches ich weder Online noch in den Büchern finden kann.
Und zwar : will ich das „Shape ändern“ unterbinden am liebsten mit einer Message, zur Frage wie kann ich das Catchen ??
Wäre für jeden Tipp dankbar.
Liebe Grüße
Hallo M.,
Du benötigst eine Klasse mit einem Event-Handler
Private WithEvents m_shp_Seite As Visio.Page
Dann hast du das Ereignis
Private Sub m_shp_Seite_ShapeChanged(ByVal Shape As IVShape)
 
End Sub
Liebe Grüße
Rene