VBA Weisen Sie eine EDMVAULT5 Instanz mit der Technik "Späte Bindung" zu

Hallo

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.

Vielen Dank

Ich bin in der gleichen Situation!! Eine Lösung gefunden, die seitdem gefunden wurde? 

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.

1 „Gefällt mir“

Vielen Dank für Ihre Antwort! Über die VBA-:) ist es mir schließlich gelungen

@yves-marie.freyssinet 

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.

1 „Gefällt mir“

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:) 

1 „Gefällt mir“

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;)

1 „Gefällt mir“

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!

1 „Gefällt mir“

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.

1 „Gefällt mir“

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:)