w edytorze VBA, gdy zaznaczysz pola w menedżerze odwołań, wykonasz "wczesne wiązanie". Oznacza to, że w czasie kompilacji VBA skanuje odwołania i zna wszystkie typy obiektów. Dzięki temu możliwe jest pisanie:
Dim eVault as EdmVault5 : Set eVault = New EdmVault5
Minusem tej metody jest to, że nie jest przenośna. W VBA często zaleca się wykonanie "późnego wiązania". Zaleca się napisać:
Dim eVault as Object: Set eVault = CreateObject("ConisioLib.EdmVault")
Problem polega na tym, że otrzymuję obiekt EdmVault21, "pure", który nie dziedziczy z innych wersji EdmVault, zwłaszcza z EdmVault 5 i jego metody GetFileFromPath(). I nie wiem, jak to "rzucać" w vba.
Stąd moje pytanie, jak utworzyć obiekt edmVault5 w późnym powiązaniu?
Chciałbym zwrócić uwagę, że jeśli robię późne wiązanie, to dlatego, że wczesne wiązanie nie działa w moim przypadku. Nie piszę makra, ale kod dla zadania ePDM. To bardzo specjalne zadanie wykonuje czynności, które mają zdalne połączenie z CAD, ale muszę wstawić wynikowy plik do repozytorium.
Witam Ze swojej strony przeniosłem swój kod do pliku wykonywalnego w vb.net. Makro vba zadania przygotowuje wiersz polecenia i wywołuje ten plik wykonywalny. Koniec z problemami z deklaracją i odniesieniem.
OK... Ale gdybyś zamiast po prostu drwić ze społeczności, mógł podzielić się z nimi swoim rozwiązaniem, aby pomóc im tak, jak oni pomagają tobie, byłoby to hojne z twojej strony.
Z nikogo nie drwię! Nie skończyłem jeszcze makro.... Ale wszystko jest dobre i funkcjonalne:) Cieszę się więc, że mogę podzielić się tym, co znalazłam i mam nadzieję, że czas spędzony na poszukiwaniach będzie korzystny dla innych!
Oto makro, które udało mi się zrobić, wykonując późne zaślepienie, jak wyjaśnia binoyte, służy ono do wyodrębniania pliku za pomocą skryptu PDM:
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
**Nie zapomnij zamienić znaku "NOM_COFFRE_PDM" na nazwę skarbca pdm :)
Z tego co wyczytałem i udało mi się znaleźć jako informacje, kiedyś stworzyłem następujący obiekt:
Dim Vault As Object
Set Vault = CreateObject("ConisioLib.EdmVault")
wystarczy zadeklarować np . "Folder As Object" zamiast "Folder As IEdmFolder5" i działa, tak samo dla innych instrukcji tego samego typu :)
Bardzo dziękuję za informacje na temat przetwarzania ścieżek do plików, przyjrzę się im bliżej!! Nie jestem jeszcze ekspertem od makr VBA ahah i cieszę się, że mam jakieś rady :)
Nie mogę się doczekać, aby podzielić się kolejnymi wskazówkami!
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
Otrzymuję błąd wykonania 13: niezgodność typu dla wiersza:
Set eFile = eVault.GetFileFromPath(sFichier)
Jednak odlewanie wydaje się być wykonywane automatycznie. Kiedy patrzymy na okno szpiegowskie VBA (patrz załączony zrzut ekranu), możemy zobaczyć obiekty IEdmVault5. Ponadto metoda eVault.LoginAuto() zależy od obiektu IEdmVault5.