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:)
Entschuldigung für den Fehler, aber diese Art von Antwort ist so wiederkehrend im Netz...
Bravo für das Makro und Danke fürs Teilen;)
Vielen Dank. Was macht es also möglich?
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:)
Wir freuen uns darauf, weitere Tipps zu teilen!
Ah, wenn ich meine Augen öffne, verstehe ich besser, warum es bei dir funktioniert und bei mir nicht!
Sie verwenden die Methode:
Vault.GetFolderFromPath()
was für mich übrigens nie ein Problem war, aber in meinem Fall verwende ich die Methode:
Vault.GetFileFromPath()
Und da funktioniert es nicht. Mein Problem bleibt also bestehen.
Hier ist mein minimales Beispiel:
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?
1659427953.screenshot.png
Hallo
Ein Argument fehlt:
Set eFile = eVault.GetFileFromPath(sFichier, eFolder)
Hallo
Soll das nicht optional sein?
EDIT: Aus Gewissen, ich habe getestet, wie Sie angegeben haben, derselbe Fehler!
Es scheint mir nicht, außer 0 zu setzen
Hallo
Kein Problem mit mir mit dem eFolder-Argument, sonst derselbe Fehler, wenn nur sFile vorhanden ist
Was passiert, wenn Sie versuchen , die folgende Anweisung anstelle von "Set eFile = eVault.GetFileFromPath(sFile)" zu verwenden ?
Dim efolder As Object
Dim sFichier As Object
Set eFile = efolder.GetFile(sFichier)
Funktioniert es oder nicht?
Die Dokumentationsseite: GetFileFromPath-Methode (IEdmVault5)
Es ist optional, und ich hatte es auch mit 0 versucht.
Danke für deine Antwort, aber... verdammt! Ich frage mich, ob ich mir die DLL-Aufzeichnung mit regsrv32 ansehen sollte.
Ich denke darüber nach, weil ich versucht habe, ein EdmFile-Objekt direkt zu erstellen:
Set eFile = CreateObject("ConisioLib.EdmFile")
und ich erhalte einen Laufzeitfehler 429: Eine ActiveX-Komponente kann kein Objekt erstellen.
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:)
Nun, mein minimales Beispiel ist ins Spiel gekommen!
Das zweite Argument ist also in der Tat nicht optional.
Set eFile = eVault.GetFileFromPath(sFichier, eFolder)
Die einzige andere Manipulation, die ich durchgeführt habe, war ein
regsrv32 "C:\Program Files\SOLIDWORKS Corp\SOLIDWORKS PDM\EdmInterface.dll"
was den DLL-Eintrag vielleicht wieder in Ordnung gebracht hätte. EdmInterface.dll wurde notwendigerweise geladen, sonst hätte ich viele andere Meldungen bekommen... Es bleibt abzuwarten, wie es sich in einer ePDM-Aufgabe verhält!
Ich schließe nicht gerne, ohne alles verstanden zu haben, aber hey VIELEN DANK für Ihre Hilfe!
Vielleicht ist auch die PDM-API-Dokumentation gefälscht. Auch ohne "Late Binding" setze ich immer ein Argument nach dem Pfad der Speicherdatei.
Duplizieren, ich kann nicht löschen
Ich denke, die Dokumentation zeigt die Absicht der Entwickler, aber die Implementierung in der Funktion ist falsch.
Das zweite Argument wird als Referenz an die Funktion übergeben, was es ihr ermöglicht, durch Schreiben darauf zuzugreifen . Um es klar zu sagen: Dieses Argument gibt nicht das Verzeichnis an, in dem nach der Datei gesucht werden soll. Es ermöglicht Ihnen lediglich, das Verzeichnisobjekt wiederherzustellen, in dem die Datei gefunden wurde. Aber wenn wir eine Datei über ihren Pfad suchen, kennen wir bereits das übergeordnete Verzeichnis. Dieses zweite Argument ist absolut nicht wesentlich. Vielleicht können wir in einigen Fällen ein paar Zeilen Code gewinnen.
Seien Sie jedoch vorsichtig, wenn die Datei nicht existiert, setzt die Funktion Null in das zweite Argument. In meinem minimalen Beispiel kann getFileFromPath den eFolder leeren, indem er ihm Null zugewiesen wird, und den Rest zum Absturz bringen. Nun, das war nur ein Beispiel.