Ich lese per Programmierung die Laufrichtung von Gängen von Visio-Zeichnungen aus. Ich stutze, weil das Ergebnis nicht korrekt ist. Schaue mir die Zeichnungen genauer an: Warum zeigen einige Pfeile mit einem Winkel 90° nach links, während andere Pfeile mit dem Winkel -90° auch nach links zeigen? Die Lösung ist schnell gefunden: einige Pfeile wurden gespiegelt. Also muss man neben dem Winkel auch noch FlipY überprüfen. Dann findet man die Pfeilrichtung.
Kategorie: VBA
Nachbarshapes
Hyperlinks in Excel auf Visio-Dateien
Dim strPfad As String
Dim strDatei As String
Dim i As Integer
strPfad = „D:\Eigene Dateien\Visio\contoso\“
strDatei = Dir(strPfad, vbNormal)
i = 2
Do While strDatei <> „“
If Right(strDatei, 4) = „.vsd“ Or Right(strDatei, 4) = „.vsdx“ Or Right(strDatei, 5) = „.vsdm“ Then
ActiveSheet.Cells(i, 1).Value = strDatei
Range(„A1“).Hyperlinks.Add Anchor:=ActiveSheet.Cells(i, 1), _
Address:=strPfad & strDatei, _
TextToDisplay:=strDatei
i = i + 1
End If
strDatei = Dir
Loop
End Sub
Steuerelemente und Gruppen
Verbindungspunkte
Timer
Hallo Herr Martin,
danke für Ihre letzte Antwort.!
Um in der Angelegenheit große Schritte zu tun (oder sie bleiben zu lassen, was ich erst einmal bevorzugt habe) müssten wir wohl über das Schreiben hinausgehen.
Momentan treibt mich eine andere Angelegenheit um:
Inzwischen nutze ich ja das visio2010.
Ein Kollege, dem ich eine kleine Simulation zugeschickt habe, benutzt ein visio 2013.
Nun brauche ich für meine Routine einen genauen 20ms Zeittakt. (oder auch 30ms, …)
Die Rechnerzeit hole ich mir mit GetTime aus
Private Declare Function GetTime Lib „winmm.dll“ Alias „timeGetTime“ () As Long
Dabei überwache ich, ob mein Arbeitszyklus auch nicht länger als die 20ms ist.
Seit langem funktioniert bei mir die Routine. (auch gemütliche PC’s) Die Überwachung habe ich sichtbar gestaltet.
Jetzt, bei meinem Kollegen, braucht der PC, wie soll ich sagen, „mehr Zeit“ (auch 30ms reichen nicht)….
Frage:
– Ist Ihnen ein besserer Zugriff auf die Systemzeit des PC’s im Rahmen in visio bekannt?
– Hätten Sie ein Erklärung parat ?
zur Info das kleine Programmstück
If (M_GetTime – Ticker) > Taktzeit Then ‚ in Abstand von z.B. 20ms wird getaktet
Schleife = True ‚ für den Aufruf eines Programmes
If (M_GetTime – Ticker) > 2 * Taktzeit Then ‚ Kontrolle, ob Überlauf!
Taktueberlauf = Taktueberlauf + 1
End If
Normaltakt = Normaltakt + 1 ‚ Zähler für den Takt
Ticker = Ticker + Taktzeit
End If
….im Programm dann „Schleife = false“
####
Hallo Herr F.,
Hätten Sie mich gefragt, wie man einen Timer ansteuert , hätte ich Ihnen geantwortet – mit einer API-Funktion. Nein , Visio hat, anders als Word oder Access, keinen integrierten Timer.
Dass diese Funktion nicht richtig arbeitet, oder sich je nach Rechner oder Prozessor oder Betriebssystem unterschiedlich verhält – dazu kann ich nichts sagen .
Also doch Visual Studio als Überbau?
Sorry – da kann ich leider nicht weiterhelfen.
Schöne Grüße
Rene Martin
#####
Hallo Herr Martin,
vielen Dank für Ihre Antwort!
Und Sie waren eigentlich meine einzige große Hoffnung, etwas Licht in die Dunkelheit zu bringen!
Es ist schon verrückt! Ich habe zu Hause 2 PC’s , einen zum Arbeiten und einen alten, der nur noch herumsteht. Und einen kleinen Laptop.
Auf allen 3 Rechnern (ob W7 oder XP) läuft die genannte Routine (quasi unabhängig von der Leistungsfähigkeit) recht ähnlich.
Das Nutzerprogramm braucht halt ein paar Millisekunden. Der Hauptanteil dürfte aber für VB-visio bei der Bildschirmbehandlung (Verschieben von Rechtecken) verschwendet werden. Hat man z.B einen bunten Hintergrund braucht die Routine mehr Zeit…
Nun mache ich die Erfahrung, dass mit einem (sicher) leistungsfähigem Rechner, aber eben mit visio 2013, das gleiche Programm erheblich mehr Zeit kostet.
Nun, ich werde auf die Ferne mit den Kollegen einige Test’s versuchen , um der Sache etwas näher zu kommen.
Gern informiere ich Sie über das Ergebnis. Vielleicht gibt es auch noch andere Nutzer, die ähnliche Erfahrungen brauchen könnten. Und Sie sind ja der wohl einzige Fachmann, der sich mit visio voll auskennt.
Aus meiner Sicht ist es eigentlich schade, dass MS das Produkt „visio“ so verkommen lässt. ( oder so modernisiert…)
In meiner frühen Zeit habe ich noch maschinennahe Programme geschrieben (Z80). Da es Mangel an Speicher gab, war es oft das Ziel, überlegt zu programmieren…..
Noch bin ich begeistert, dass man z.B. mit 300kB visio-Programm bewegte Bilder mit wichtigem techn. Hintergrund zusammenstellen kann.
Allerdings ist für Viele das meist gar kein Argument… – eben schade!
Eingebettete Objekte
Zeichenblattlayout
Sehr geehrte Damen und Herren, ich habe mit großem Interesse die Schulung über Visio 2010 Programmierung angesehen. Dabei habe ich leider nicht gefunden, wie man per VBA die untergeordneten Elemente eines Shapes neu anordnet. Wenn ich programmtechnisch „user.thislayoutstyle“ auf einen anderen Wert ändere, ist dies im Shape-Sheet zwar sichtbar, aber die Anordnung ändert sich trotz eines doevents nicht. Was muss ich programmieren, damit sich die Anordnung sichtbar ändert? Vielen Dank für Ihre Hilfe und freundliche Grüße aus Berlin
####
Hallo Herr V.,
der Makrorekorder verrät es 😉 (ich hätte es auch nicht
gewusst).
Wenn Sie in die Zellen des ShapeSheets des Blattes beispielsweise folgende Formeln eintragen :
ActivePage.PageSheet.Cells(„PlaceStyle“).FormulaU = „3“
ActivePage.PageSheet.Cells(„RouteStyle“).FormulaU = „1“
müssen Sie diese mit der Methode Layout beenden – sonst werden sie nicht
durchgeführt:
ActivePage.Layout
schöne Grüße und viel Spaß mit Visio
Rene Martin
PS: Das habe ich einige Mal „per Hand“ programmiert: das manuelle Platzieren von Shapes – fürchterliche Rechenarbeit – aber das wissen Sie sicherlich selbst.