Shapedaten im Shape und auf dem Zeichenblatt

Amüsant. Ein Zeichenblatt hat Shape-Daten. Wenn nun ein Shape darauf verweist, also mit
=ThePage!Prop. …
einen Bezug herstellt, dann erhält ein neues, leeres Blatt die Shapedaten, sobald das Shape hinüber kopiert wird.
Das heißt: Speichert man das Shape in einer Schablone, bekommt das Blatt die Daten. Diese können gefüllt werden. Auf dem Shape werden sie dann angezeigt.

Datenexport

Guten Tag Herr Martin,

ich habe mal versucht eine Kombination von Visio und Excel, wie von Ihnen aufgezeigt zu realisieren. Dabei sind noch einige Schwierigkeiten aufgetaucht:

Welche Einstellung muss vorgenommen werden damit in der Spalte Beschreibung gleiche Einträge zusammen gefasst werden?

Die Antwort:
Sie haben beim Export die Möglichkeit, im dritten Schritt zu gruppieren und in den Optionen gleiche Werte zusammenzufassen:

Dynamische Daten

Heute in der Visio-Schulung haben wir diskutiert, wie man an mehreren Stellen Texte ändern kann.
Ich habe zwei Dinge vorgeschlagen:
* Man kann im ShapeSheet des Zeichenblattes Daten hinterlegen. Diese Daten können von den Daten eines Shapes über
=TheDoc!Prop.Datenname
„geholt“ werden. Und dieses Datenfel kann über Einfügen / Feld in den Text des Shapes eingefügt werden.
* Man kann eine Datenquelle (eine Excel-Mappe) an die Zeichnung hängen. Dann ein Datensatz mit dem Shape verbinden. Die Datengrafik ausschalten. Und die Daten über Einfügen / Feld im Shape anzeigen lassen.
Wir haben lange beide Varianten diskutiert.
Sie haben sich für die letztere entschieden.

Verknüpfte Shapedaten

Sehr geehrter Herr Martin,
 
habe mir von Ihnen „Visio 2013/2016 anpassen: das Handbuch für Entwickler“ und das Video „Visio 2010 Programmierung“ gekauft und es hat mit schon sehr viel weitergeholfen.
Für eine bestimmte Sache kann ich aber keine Lösung finden und ich hoffe Sie können mir „auf dem kurzen Dienstweg“ weiterhelfen.
 
In mein Visio Dokument habe ich Shapes mit externe Daten „verheiratet“.
Wenn der Datensatz sich ändert kann es vorkommen, dass der Shape keine Verbindung zu ein Datensatz mehr hat. Soweit so gut.
Wie kann ich erkennen, dass ein Shape keine Verbindung zum Datensatz mehr hat?
Im Shapesheet finde ich keinen entsprechenden Parameter.
 
Mit ItemFromID oder LinkToData komme ich nicht weiter.
In den zwei Bildern sehen Sie was ich meine.
Zu dem einen Shape besteht eine Datenverknüpfung, zu dem anderen nicht.
Ich möchte die Shapes z.B. Rot umranden die keine Verknüpfung mehr haben.
20170216Daten0120170216Daten02
#####
Hallo Herr L.,
 
bitte verzeihen Sie – ich war geschäftlich unterwegs, habe eine Menge Arbeit auf dem Schreibtisch – da ist Ihre Mail nach unten gerutscht …
 
Ich habe mal nachgeschaut – man findet wirklich keinen Eintrag im ShapeSheet, der darauf hinweist, dass ein Shape mit einem Datensatz verknüpft ist oder nicht.
Das heißt: ich würde das Pferd umgekehrt aufzäumen:
Legen Sie in Ihrer DB-Tabelle eine Hilfsspalte an, die bei jedem Datensatz den gleichen Wert aufweist (aktuelles Datum?).
Verknüpfen Sie die Datenquelle mit der Zeichnung und mit den Shapes.
Ändern Sie den Wert in der Hilfsspalte für alle Daten.
Die Shapes, die nun den neuen Wert haben, sind verknüpft.
 
Sorry – aber etwas anderes fällt mir (im Moment) auch nicht ein.

Zahlen sortieren

Hallo Rene,

erst einmal sorry für die späte Rückmeldung, ich war im Urlaub. Das Problem mit den Verbindern habe ich mittlerweile gelöst. Jetzt hab ich aber ein weiteres Probelm allerdings diesmal mit Excel.

Ich schreibe Daten aus Visio per VBA Makro nach Excel. In Excel werden die Daten dann aufsteigend nach einer Positionsnummer sortiert. Allerdings hat Excel mit der Sortierung der Positionsnummer einige Probleme. Wenn die Nummern beispielsweise 1, 2, 3, ,4 usw lauten läuft alles gut – bei Zahlen wie 1.1, 1.2, 1.3, …. 1.9 klappt auch noch die Sortierung einwandfrei.

Sobald ich aber Nummern ab 1.10 oder 2.11 benutze wird die Sortierung nicht mehr eingehalten. Es sieht dann beispielsweise wie folgt aus :

1.1
1.10
1.11
1.12
1.2
….

Ich möchte allerdings folgende Sortierung:

1.1
1.2
1.3

1.10
1.11

Hast du eine Idee wie ich das anstellen kann ? Hab im Internet schon etwas gegoogelt allerdings finde ich leider keine Lösung dazu. Achja die Nummern werden als Text behandelt.

Liebe Grüße

Stephan
##########

Hallo Stephan,

Excel unterscheidet bei fast allen Dingen zwischen Text und Zahl: rechnen, Zahlenformat, Dateneingabe, filtern, … und eben auch beim Sortieren. 1.1 und 1.10 wird als Text erkannt und eben wie Text sortiert: Anton < Berta < Cäsar < Dora …

Würde Excel die Zahlen als Zahlen erkennen, würde er ein Datum daraus machen:

01. Januar

01. Januar 2001

und so weiter

Die einzige Lösung, die ich sehe: Gib die Daten in der Form 01.01, 01.02., … 01.10, 01.11, … 01.20, 01.21 … ein. Dann produziert die Textsortierung keine Probleme.

Übrigens: das Gleiche Problem hast Du auch bei Dateinamen, wenn Deine Kamera Bilder mit Dateinamen pic1, pic2, … pic10, pic11, … speichert. Dann gilt: pic1 < pic10 < pic11 < pic2 …

Liebe Grüße

Rene

grafik27

Daten in Visio

Hallo Herr Dr. Martin,
ich hätte nochmal ein paar spezielle Fragen zu Visio.
Ich kann über VBA auf die Shape-Daten meiner Shapes auf dem Zeichenblatt zugreifen … ABER … Wie kann ich auf Shape-Daten von Schablonen über VBA zugreifen?
Und: Gibt es eine Möglichkeit die Shape-Daten eines Shapes auf einen Schlag komplett zu löschen?
Z.Zt. kann ich immer nur die einzelnen Elemente löschen aber nicht alle auf einmal.
###
Hallo Herr S.,
* Sie müssen auf alle offenen Dokumente in Visio zugreifen, überprüfen, ob es sich dabei um eine Schablone handelt, die Mastershapes auslesen und von ihnen die Daten auslesen.
 
*ich würde nicht auf die Shape-Datensätze zugreifen. Erstes weiß ich nicht, wo Visio diese abspeichert, zweites ist es mir zu unsicher und drittens vermute ich einen Bug darin (das an anderer Stelle). Ich würde auf Abschnitt und Zeilen der Shapes per Schleife zugreifen.
 
* Sie können den Abschnitt visSectionProp löschen – aber dann zickt er manchmal – oder besser: jede Zeile dieses Abschnittes.
Spitzer20151123
Beispielsweise so:
Public Sub cmdDaten1(ByRef control As IRibbonControl)
Dim strDateien As String
Dim strSchablonen As String
Dim vsSchablone() As Document
Dim strMaster() As String
Dim vsMastershape As Master
Dim i As Integer
Dim j As Integer
Dim k As Integer
Dim m As Integer
Dim strSpapeDatenzeile As String
ReDim vsSchablone(0)
For i = 1 To Application.Documents.Count
‚ — durchlaufe alle offenen Dokumente
strDateien = strDateien & Application.Documents(i).Name & vbCr
If Application.Documents(i).Type = visTypeStencil Then
‚ — wenn du eine Schablone bist
ReDim Preserve vsSchablone(UBound(vsSchablone) + 1)
strSchablonen = strSchablonen & Application.Documents(i).Name & vbCr
Set vsSchablone(UBound(vsSchablone)) = Application.Documents(i)
End If
Next i
MsgBox „Liste der offenen Dateien:“ & vbCr & strDateien
MsgBox „Liste der offenen Schablonen:“ & vbCr & strSchablonen
For j = 1 To UBound(vsSchablone)
vsSchablone(j).Masters.GetNames strMaster
‚ — alle Mastershapes der Schablone
MsgBox „Liste der Mastershapes der Schablone “ & vsSchablone(j) & vbCr & Join(strMaster, vbCr)
For k = 0 To UBound(strMaster)
Set vsMastershape = Application.Documents(vsSchablone(j).Name).Masters(strMaster(k))
strSpapeDatenzeile = „“
If vsMastershape.Shapes(1).SectionExists(visSectionProp, False) = True Then
‚ — wenn Shapedaten im Mastershape vorhanden sind.
For m = 0 To vsMastershape.Shapes(1).Section(visSectionProp).Count – 1
strSpapeDatenzeile = strSpapeDatenzeile & vsMastershape.Shapes(1).Section(visSectionProp).Row(m).Cell(0).Name & vbCr
‚###############
‚ Cell(0): Value
‚ Cell(1): Prompt
‚ Cell(2): Label
‚ Cell(3): Format
‚ Cell(4): SortKey
‚ Cell(5): Type
‚ Cell(6): Invisible
‚ Cell(7): Verify
‚ Cell(8): DateLinked
‚###############
Next
MsgBox „Mastershape „““ & vsMastershape.Name & „““ hat folgende Daten:“ & vbCr & strSpapeDatenzeile
End If
Next
Next
End Sub
 
 
 
 
Public Sub cmdDaten3(ByRef control As IRibbonControl)
Dim i As Integer
If ActiveWindow.Selection.Count = 0 Then
MsgBox „Sie haben kein Shape ausgewählt!“
ElseIf ActiveWindow.Selection.Count > 1 Then
MsgBox „Bitte markieren Sie nur ein Shape!“
Else
For i = ActiveWindow.Selection(1).Section(visSectionProp).Count – 1 To 0 Step -1
ActiveWindow.Selection(1).DeleteRow visSectionProp, i
Next
MsgBox „Alle Zeilen der Shape-Daten wurden gelöscht!“
 
End If
 
End Sub
 
Public Sub cmdDaten2(ByRef control As IRibbonControl)
If ActiveWindow.Selection.Count = 0 Then
MsgBox „Sie haben kein Shape ausgewählt!“
ElseIf ActiveWindow.Selection.Count > 1 Then
MsgBox „Bitte markieren Sie nur ein Shape!“
Else
If ActiveWindow.Selection(1).SectionExists(visSectionProp, False) = True Then
ActiveWindow.Selection(1).DeleteSection visSectionProp
MsgBox „Abschnitt „“Shape-Daten““ wurde gelöscht!“
End If
End If
End Sub
 
 
 
 
 

Daten visualisieren

Hübsche Sache, die wir gestern in der Visio-Schulung besprochen haben:
In einer Exceltabelle stehen Daten, die in Visio dargestellt werden sollen. Damit die Daten nicht ein zweites Mal abgeschrieben werden müssen habe ich vorgeschlagen die Tabelle über Daten / Benutzerdefinierter Import an die Zeichnung zu binden.
Auf eine Linie und auf ein Kästchen wird ein Datensatz gezogen. Dadurch erhält das Shape diese Informationen als Daten. Damit sie angezeigt werden, editiert man den Text ([F2]) und fügt das Datenfeld ein (Einfügen / Feld). Der Verbinder und das Kästchen können in einer Schablone gespeichert werden (zuvor sollte man die Verknüpfung der Datentabelle zu kappen). Damit die Linienstärke entsprechend der Größe der Daten angepasst wird, wird im ShapeSheet im Abschnitt „LineFormat“ in der Zelle „LineWeight“ eine Formel eingetragen, beispielsweise so:
=IF(Prop._VisDM_Einnahmen_Finanz>1000000,10 mm,
IF(Prop._VisDM_Einnahmen_Finanz>100000,5 mm,
IF(Prop._VisDM_Einnahmen_Finanz>10000,3 mm,
IF(Prop._VisDM_Einnahmen_Finanz>1000,2 mm,1 mm))))
Die Linienstärke nimmt Bezug auf das Datenfeld.
Unglücklicherweise zeigt Excel die Daten ein zweites Mal über eine Datengrafik auf dem Shape an. Da das nicht gewünscht ist, muss man in dieser Datengrafik die Felder löschen.
Und nun können die Datensätze auf das Diagramm gezogen werden.
Die Darstellung der Daten
Die Darstellung der Daten

Berichte

Und: hat man in Visio 2013 einen Bericht erstellt, öffnet diese Datei in Visio 2016, dann lässt sich der Bericht nicht mehr aktualisieren. Zumindest nicht bei dem halben Dutzend Dateien, bei denen ich es versucht habe. Ein Bug?

Berichte
Berichte

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

 

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