Wenn Sie im VBA-Editor die Kontrollkästchen im Referenz-Manager aktivieren, führen Sie eine "frühe Bindung" aus. Das bedeutet, dass VBA zur Kompilierzeit die Referenzen scannt und alle Arten von Objekten kennt. Dadurch ist es möglich, Folgendes zu schreiben:
Dim eVault as EdmVault5 : Set eVault = New EdmVault5
Der Nachteil dieser Methode ist, dass sie nicht tragbar ist. In VBA wird oft empfohlen, eine "späte Bindung" durchzuführen. Es wird empfohlen zu schreiben:
Dim eVault as Object: Set eVault = CreateObject("ConisioLib.EdmVault")
Wo ich Probleme habe, ist, dass ich ein EdmVault21-Objekt bekomme, "pure", das nicht von den anderen Versionen von EdmVault erbt, insbesondere von EdmVault 5 und seiner GetFileFromPath()-Methode. Und ich weiß nicht, wie man in VBA "castet".
Daher meine Frage, wie erstelle ich ein edmVault5-Objekt mit später Bindung?
Ich möchte darauf hinweisen, dass, wenn ich eine späte Bindung mache, es daran liegt, dass eine frühe Bindung in meinem Fall nicht funktioniert. Ich schreibe kein Makro, sondern Code für eine ePDM-Aufgabe. Diese sehr spezielle Aufgabe führt Dinge aus, die eine Remote-Verbindung mit CAD haben, aber ich muss die resultierende Datei in den Tresor einfügen.
Hallo Ich für meinen Teil habe meinen Code in eine ausführbare Datei in vb.net portiert. Das VBA-Makro der Aufgabe bereitet die Befehlszeile vor und ruft diese ausführbare Datei auf. Keine Probleme mehr mit Deklaration und Referenz.
OKAY... Aber wenn Sie, anstatt die Community nur zu verspotten, Ihre Lösung mit ihnen teilen könnten, um ihnen zu helfen, so wie sie Ihnen helfen, wäre das großzügig von Ihnen.
Ich verspotte niemanden! Ich hatte mein Makro noch nicht fertig.... Aber alles ist gut und funktional:) Also teile ich gerne, was ich gefunden habe, und ich hoffe, dass die Zeit, die ich mit der Suche verbracht habe, für andere von Vorteil sein wird!
Hier ist das Makro, das ich durch spätes Blinding erstellt habe , wie Binoyte erklärt, es wird verwendet, um eine Datei über das PDM-Skript zu extrahieren:
Sub main()
Dim Vault As Object
Set Vault = CreateObject("ConisioLib.EdmVault")
Vault.LoginAuto "NOM_COFFRE_PDM", 0
modelPath = "<Filepath>"
If Vault.IsLoggedIn Then
Dim folder As Object
Dim folderPath As String
Dim FolderPath1 As String
folderPath = modelPath
j = InStrRev(folderPath, "\")
FolderPath1 = Left(folderPath, j)
Set folder = Vault.GetFolderFromPath(FolderPath1)
i = Len(modelPath)
j = InStrRev(modelPath, "\")
FileName = Right(modelPath, i - j)
Dim file As Object
Dim oNull As Object
Set file = folder.GetFile(FileName)
If file Is Nothing Then
MsgBox "File not found."
End If
file.LockFile folder.ID, 0
CheckOutFile = "Successful"
Else
Err.Raise vbError, "User is not logged in to the vault"
End If
End Sub
**Vergessen Sie nicht, das 'NOM_COFFRE_PDM' durch den Namen Ihres PDM-Tresors zu ersetzen:)
Ihr stört euch an der Behandlung eurer Wege. Sie sollten die Scripting.FileSystemObject-Bibliothek verwenden
' Chargement de l'objet Système de Fichiers
Dim oFS As Object
Set oFS = CreateObject("Scripting.FileSystemObject")
sInputFile = "<Filepath>"
Suchen Sie im Objekt-Explorer nach anderen Methoden in dieser Bibliothek und dem übergeordneten Element Scripting im Allgemeinen. Das ist ganz praktisch!
Nach dem, was ich gelesen habe und als Info finden konnte, habe ich einmal das folgende Objekt erstellt:
Dim Vault As Object
Set Vault = CreateObject("ConisioLib.EdmVault")
deklarieren Sie einfach z.B . "Folder As Object" anstelle von "Folder As IEdmFolder5" und es funktioniert, das Gleiche gilt für andere Anweisungen des gleichen Typs:)
Vielen Dank für die Info über die Verarbeitung von Dateipfaden, ich werde mir das mal genauer ansehen!! Ich bin noch kein Experte für VBA-Makros ahah und ich bin froh, dass ich einen Rat habe:)
Sub ajoutfich()
Dim eVault, eFile, eFolder As Object
Dim iStatus As Integer
Dim sFichier, sDestination, sSource As String
Dim oFS As Object
Set oFS = CreateObject("Scripting.FileSystemObject")
sDestination = "D:\ePDM\…\dossier\"
sSource = "E:\FICHIER.EXT"
sFichier = oFS.buildpath(sDestination, oFS.GetFileName(sSource))
Set eVault = CreateObject("ConisioLib.EdmVault")
If Not eVault.IsLoggedIn Then
eVault.LoginAuto "MON_COFFRE_PDM", 0
End If
Set eFolder = eVault.GetFolderFromPath(sDestination)
Set eFile = eVault.GetFileFromPath(sFichier)
If Not eFile Is Nothing Then
'à complèter
End If
iStatus = eFolder.AddFile(0, sSource)
End Sub
Ich erhalte den Laufzeitfehler 13: Geben Sie nicht übereinstimmend für Zeile ein:
Set eFile = eVault.GetFileFromPath(sFichier)
Das Casting scheint jedoch automatisch zu erfolgen. Wenn wir uns das VBA-Spionagefenster ansehen (siehe beigefügter Screenshot), können wir IEdmVault5-Objekte sehen. Außerdem hängt die Methode eVault.LoginAuto() von IEdmVault5 ab.
Warum bleibt es also bei eVault.GetFileFromPath() hängen?
Ich gebe zu, dass das vielleicht ein wenig über meine Fähigkeiten hinausgeht, ahaha, aber ich bin immer noch verfügbar, wenn du es schaffst, die Blockade zu lösen oder voranzukommen:)