Das Auslesen des vollständigen Pfades einer Referenzdatei mit VBA funktioniert nur dann, wenn die Darstellung "eingeschaltet" ist:Denn bei ausgeschalteter Darstellung gibt der Versuch, den Pfad zu lesen einen Laufzeitfehler, da die Eigenschaft dann nicht zur Verfügung steht.Hier ein Beispiel für VBA Code, der auf einen Fehler läuft, wenn die Referenz ausgeschaltet ist:
Sub Fehler_wenn_ausgeschaltet() Dim oAtt As Attachment For Each oAtt In ActiveModelReference.Attachments Debug.Print "Ganzer Pfad: " & oAtt.DesignFile.FullName ' dies erzeugt Fehler, wenn Referenz ausgeschaltet Next End Sub
Dieses Problem kann jedoch umgangen werden, wenn man zum Auslesen des Pfades die MDL Funktion mdlRefFile_getParameters verwendet.Um diese Funktion verwenden zu können, muss eine Deklaration der Funktion erfolgen:
Declare Function mdlRefFile_getParameters Lib "stdmdlbltin.dll" (ByVal param As String, ByVal paramName As Long, ByVal modelRef As Long) As Long
Diese Funktion bietet neben dem Zugriff auf verschiedene Eigenschaften der Referenzen auch Zugriff auf den Pfad der Zeichnungsdatei. Das vorige Beispiel könnte unter Verwendung dieser Funktion etwa so aussehen:
Declare Function mdlRefFile_getParameters Lib "stdmdlbltin.dll" (ByVal param As String, ByVal paramName As Long, ByVal modelRef As Long) As Long Const REFERENCE_FILENAME = 7 Sub Pfad_zu_ref() Dim oAtt As Attachment Dim strFullName As String Dim rtc As Long For Each oAtt In ActiveModelReference.Attachments strFullName = Space(512) rtc = mdlRefFile_getParameters(strFullName, REFERENCE_FILENAME, oAtt.MdlModelRefP) If rtc = 0 Then If Len(strFullName) > 0 Then strFullName = Left$(strFullName, InStr(1, strFullName, vbNullChar) - 1) Debug.Print strFullName End If End If Next End Sub
Wenn jedoch eine Referenzdatei nicht gefunden werden kann, dann kann auch diese Funktion keinen Pfad herausgeben, stattdessen hilft dann nur, anstatt zu versuchen den vollständigen Pfad zu lesen, den Anhangsnamen (VBA Eigenschaft .AttachName) auszulesen, also den Wert, der im Referenzmanager unter Dateiname angegeben ist, möglicherweise ist hier sogar der vollstänige Pfad abgespeichert worden.Ein weiterführendes Besipiel zeigt hier die Anwendung der Funktion: Mit VBA Referenzpfade ändern