Detail blabla zu mir und dem Projekt:
zu mir:
Ich habe wenig Erfahrung mit VBA Syntax. Hab mal eine Access Datenbank gestrickt die kleinere VBA Inhalte für Formulare benötigt hat aber das war es dann auch schon. Komme nicht aus der IT-Branche, Scripte aber seit vielen vielen Jahren gelegentlich kleine und mittlere Hilfsanwendungen mit der Sprache AutoIt.
das Projekt:
Derzeit muss ich aufgrund einer Technologieablösung viel grafische Bestandsdokumentation um neue Systeme ergänzen. Ich habe mich dazu entschieden die grafische Bestandsdoku komplett in ein neues Visio Dokument zu überführen, um den Wildwuchs an unterschiedlichsten Darstellungen in der alten Dokumentatin ein für alle Mal zu bekämpfen. Neue Mastershapes; diese sind komplett geschützt gegen editierung; notwendige editierungen wie Texte werden vom Anwender nicht direkt, sondern über die Shapedaten eingepflegt.
Soweit so gut.
Eine Anbindung der Shapedaten an Betriebsmitteldatenbanken kann ich aus Zeitgründen in dem Projekt leider nicht stemmen, was mich sehr schmerzt, da das vermutlich niemals nachgeholt wird. Die Dokumentation ist nur ein minimaler Teil eines an sich schon riesigen Projektes.
Für ein paar Komfortfunktionen sollte aber noch nebenbei Zeit sein. Da habe ich mir folgendes ausgedacht:
Einige Shapes haben in meinem Visio Dokument ein selbst angelegtes Datenfeld in dem eine Referenznummer für Betriebsmitteldokumentationen eingetragen wird. Diese wird grafisch an dem Shape angezeigt. Zu jeder Referenznummer gibt es irgendein Office Dokument (meist Excel) welches neben anderen Bestandteilen die Referenznummer in Dateinamen enthält. Das hilft bei ausgedruckten Plansätzen die Dokumentation für das dargestellte Shape (Betriebsmittel) zu identifizieren.
Im digitalen Dokument hätte ich gerne einen Hyperlink zu dem entsprechenden Dokument auf das Shape gelegt. Um diese Hyperlinks nicht händisch pflegen zu müssen soll über VBA auf Grundlage des Datenfeldes mit der Referenz der Pfad zur entsprechenden Datei gesucht und verlinkt werden.
- Ich lese mit RefNr aus den Shapedaten aus mit „*.Cells“
- Suche den entsprechenden Dateipfad mit „Dir“
- übergebe den Pfad an das Shapedatum „*.Hyperlink“
Das habe ich auch irgendwie hinbekommen aber leider sehr unelegant und manche ReferenzNr sind Gift für mein Script
Problem A
Auf die Gestaltung der Referenznummer habe ich keinen Einfluss. Diese ist eindeutig aber die länge und Zusammenstellung der Nummer bietet Tücken. So ist sie nicht immer Nummerisch, unterschiedlich lang und startet oft auch mit einer oder mehreren vorangestellten Nullen.
Insbesondere durch die vorgestellten Nullen bekomme ich beim matchen der durch „*.Cells“ ausgelesenen Werte mit den Dateinamen ein Problem. Die Vorgestellten Nullen werden in der VBA Variable entfernt.
Aus „0001“ (ShapeDaten) wird „1“ (VBA var)
Ich weiß nicht wie ich das verhindern kann oder wie ich die entsprechende Anzahl an Nullen wieder nachträglich hinzufügen kann, da mein Code auch die Länge der Referenznummern mit Len() nicht feststellen kann, da auch hier bereits die Nullen fehlen.
Das führt dazu das mein Code Dateinamen die mit „0001“ als Refnr beginnen mit dem Wert „1“ vergleicht. Das wäre wenn die RefNr immer gleich lang ist kein problem(0001 = 1), aber darauf habe ich keinen Einfluss, so dass ich mit Len() die länge aus der Variable ermitteln muss und diese mit Left() im deiteinamen extrahieren muss (0001 <>1).
Problem B
Wie führe ich meinen VBA Script am besten aus?
Eigentlich müsste das Skript jedes Mal wenn das Shapedatenfeld mit der RefNr editiert wurde im Anschluss ausgeführt werden. Ein Event dafür habe ich nicht finden können. Das Event Doppelklick ist keine Option für mich, da mir das zu umständlich erscheint.
Es ist mir fast peinlich da ich mir sicher bin das es bestimmt viele bessere Lösungen gibt. Derzeit habe ich die Scriptausführung mittels einem „=If“ Befehl in den Shapdaten der einen Sinnlosen vergleich mit dem Datenfeld der Referenznummer durchführt realisiert. Beide If Ereignisse False und True führen mein Script über „callthis()“ aus.
Tut mir leid, das größte Problem hier dürfte wahrscheinlich sein das ich den richtigen Terminus nicht kenne und es mir daher schwer fällt euch mein Problem in den richtigen Worten zu beschreiben. Ob ich Scriptauszüge onlinestellen darf, muss ich noch mit meinem Vorgesetzten abklären.
Viele Grüße und schonmal Danke fürs lesen bis hier her
Niklas
|