W EPDM z Eksploratorem Windows,
fakt posiadania jako scenerii "miniaturowego SW 3D"
że ostatnią zakładką używaną w EPDM jest "Podgląd"
i wybierz nowy plik,
Spowoduje to automatyczne pobranie pliku (jeśli na komputerze nie ma wersji w pamięci podręcznej)
to jeśli mamy już wersję w "cache" nie będąc ostatnią,
nie ma "automatycznego pobierania" z zakładką "Prognoza"
Ale to zachowanie można zmienić w zależności od ustawień użytkownika/grupy.
(np. zezwalając użytkownikowi na zarządzanie wersjami w pamięci podręcznej lub wymuszając najnowszą wersję itp.)
1 polubienie
Witam
Uważam, że jest to ograniczenie API oprogramowania w VBA. Bo jeśli zajrzysz do pomocy nie ma dokumentacji w VBA: http://help.solidworks.com/SearchEx.aspx?q=EdmVault5&sort=&version=2017&lang=english&prod=api
1 polubienie
Witam, jeśli interfejsy API istnieją na platformie .net, myślę, że istnieją również w vba.
Aby Ci pomóc, możesz skopiować otrzymany kod do konwertera VB.net języka C#. Kilka z nich można znaleźć w Internecie. Ponieważ Vba jest pobierany z vb.net, kod będzie wystarczająco bliski, abyś mógł go zrozumieć.
Z pamięci można załadować bibliotekę dll, aby uzyskać dostęp do obiektów pdm.
Pozdrowienia.
1 polubienie
Yves.T :
Nie ma potrzeby stosowania konwertera, jest wiele przykładów w vb.net. Oto kilka linków: http://help.solidworks.com/2017/english/api/epdmapi/Traverse_Folders_and_Files_in_Vault_Example_VBNET.htm
1 polubienie
Witam
Rzeczywiście, jest biblioteka DLL do załadowania, to "EPDM. Interop.epdm.dll", który znajduje się w katalogu instalacyjnym SOLIDWORKS Enterprise PDM.
Pozdrowienia
1 polubienie
Witam ponownie,
Możesz spróbować użyć nowego makra za pomocą następujących wierszy:
Dim swApp As Object (Obiekt Ciemny)
Przyciemnij część jako obiekt
Dim boolstatus As Boolean
Dim longstatus As Long, longwarnings As Long
Sub main()
Ustaw swApp = Application.SldWorks
Dim Vault jako nowy EdmVault5
Przyciemnij plik jako IEdmFile5
Przyciemnij folder jako IEdmFolder5
Vault.LoginAuto "Le_nom_de_ton_coffre-silny", 0
Ustaw plik = Vault.GetFileFromPath("Le_nom_de_ton_fichier_avec_le_chemin", Folder)
Ustaw część = swApp.OpenDoc6("Le_nom_de_ton_fichier_avec_le_chemin", 1, 0, "", longstatus, longwarnings)
Koniec subwoofera
Nie zapomnij zmienić nazwy repozytorium i nazwy pliku.
Pozdrowienia
1 polubienie
Cze wszystkim
Będąc na 2 projektach jednocześnie nie udało mi się jeszcze przeprowadzić testów, ale powinienem być w stanie dzisiaj z drugiej strony mam kilka pytań w związku z Twoimi odpowiedziami:
- W przypadku załadowanego ddl nie wiem, jak to zrobić... Czy jest to plik do pobrania? Plik do linkowania tylko z moimi częściami?
- W kodach, które udało mi się przejrzeć, takich jak d.roger , zauważyłem, że jest funkcja LoginAuto, jak to działa? Bo muszę się połączyć z EPDM przez to okno:

Czy ta funkcja będzie kolidować z moją zwykłą metodą logowania? Być może źle interpretuję termin "Auto".
Bo idealnie bym chciał, żeby przy uruchamianiu makra było sprawdzenie połączenia z EPDM (dzięki powyższemu oknu), a jeśli tak, to w razie potrzeby załadowanie dokumentów do cache.
Ale zanim przejdę do kodu, czy nie byłoby łatwiej zmodyfikować ustawienia EPDM, takie jak "Wyczyść pamięć podręczną przy wylogowaniu" lub inne podobne w załączniku.
Dziękuję za wielką pomoc
para_epdm.png
Witam
W przypadku połączenia nie będzie to powodować konfliktu. LoginAuto korzysta z parametrów połączenia lokalnego, więc jeśli podczas logowania zostanie zażądane login/mdp, zostanie wyświetlone okno.
Jeśli chodzi o czyszczenie pamięci podręcznej po wylogowaniu, naprawdę musisz rozważyć zalety i wady. Ma to wpływ na wyodrębnione pliki (złożenia, zwłaszcza jeśli moja pamięć jest poprawna) i może generować straty pracy. Wszystko zależy od reguł archiwizacji i rygoru użytkowników.
Co do reszty, rzeczywiście nie ma więcej przykładów w vba (w 2009 roku były), ale z VB.NET można się zorientować. Jednak nadal będą dostępne funkcje zarezerwowane dla języków C# i VB.NET.
2 polubienia
Witam
Aby biblioteka DLL została załadowana, jest to konieczne w przypadku programów w języku C#. W VBA wystarczy odwołać się do "PDMWorks Enterprise 20xx Type Library" w swoim makrze, patrz załączony obrazek.
Aby zapoznać się z oknem logowania, zobacz odpowiedź Cyril.f powyżej.
W przeciwnym razie myślę, że bardziej interesujące jest rozpoczęcie nauki języka takiego jak VB.net lub C#, które pozwalają na robienie o wiele więcej rzeczy zarówno w formie makr, jak i w formie niezależnych programów, które pozwalają łatwo kontrolować EPDM i/lub SolidWorks, ale to tylko moja osobista opinia. Istnieją doskonałe kursy do nauki tych języków na różnych stronach, takich jak https://openclassrooms.com/courses/apprenez-a-developper-en-c
Pozdrowienia
references.png
2 polubienia
Myślę, że ci się przyda. Co więcej, jest to bardzo ciekawe.
VB.net jest bardziej podobny do VBA. Nauka będzie łatwiejsza.
Osobiście korzystam z EDi Visual Studio w wersji Community: https://www.visualstudio.com/fr/thank-you-downloading-visual-studio/?sku=Community&rel=15
Polecam również doskonałe developpez.com:
Forum platformy .net
Kursy .net
Platforma .net — często zadawane pytania
Sekcja programu Visual Studio
Po prawej:
Jak uruchomić kod C lub VB.net jako makra w oprogramowaniu?
2 polubienia
W przypadku tego projektu postaram się być zadowolony z Vba, ponieważ jestem na stażu i niestety nie zostanę zatrudniony, a ludzie, którzy będą korzystać z mojego programu, ledwo mają podstawy Vba...
Ale w przyszłych aplikacjach będę się nad tym bardziej rozwodził. Z drugiej strony mam bardzo głupie pytanie, w czym jest lepszy od Vba? Więcej możliwości? Czy są to również programy do zakodowania w konkretnym module oprogramowania, czy jest on niezależny? (Tylko małe pytania, aby zorientować się, zanim zacznę się uczyć)
Vb.net jest rzeczywiście znacznie bardziej podobny do VBA i dlatego łatwiejszy do nauczenia, C# jest znacznie mniej "rozwlekły", to kwestia gustu.
W przypadku makr w C# lub VB.net w oprogramowaniu tworzę biblioteki DLL, a kiedy wstawiam nowe przyciski w oprogramowaniu, używam tych bibliotek DLL, patrz załączony obrazek. Skończyło się na tym, że stworzyłem bibliotekę DLL, która jest używana tylko do odczytywania pliku tekstowego, w którym umieszczam ścieżkę do mojego głównego pliku wykonywalnego, a następnie uruchamiam ten plik wykonywalny, co pozwala mi na znacznie większą elastyczność w moich programach.
W moich programach używam open source SharpDevelop IDE.
Pozdrowienia
capture-2.png
1 polubienie
W czym jest lepszy od Vba? Więcej możliwości? : Visual Basic for Applications (VBA) jest implementacją języka Microsoft Visual Basic, VB.NET lub C# są językami programowania samymi w sobie. DUŻO więcej możliwości.
Czy są to również programy do zakodowania w konkretnym module oprogramowania, czy jest on niezależny? Niezależne programowanie (tworzenie plików wykonywalnych) przy użyciu IDE, takiego jak Visual Studio Community lub Sharpdevelop, znacznie ułatwia sprawę.
2 polubienia
Rzeczywiście, wygląda to bardziej interesująco! Zdecydowałem więc, że po moim projekcie przechodzę do nauki VB.net.
Ale jeśli chodzi o mój problem, wypróbowałem makro d.roger i początek wydaje się działać, ponieważ kiedy klikam na wybór, otwiera się okno połączenia EPDM.
Ale następująca linia wydaje się nie spełniać swojego zadania, chyba że nie rozwiąże mojego problemu:
'Active la seconde ComboBox lorsqu'un type est sélectionné dans la 1er liste
Private Sub CBox_etat_Click()
'Déclaration des varaibles nécessaires
Dim Part As SldWorks.ModelDoc2
Dim boolstatus As Boolean
Dim longstatus As Long
Dim longwarnings As Long
Dim swModel As ModelDoc2
Dim swDesignTable As DesignTable
Dim xlWS As Worksheet
Dim DebutDesignation As Range
Dim r As Range
Dim Vault As New EdmVault5
Dim File As IEdmFile5
Dim Folder As IEdmFolder5
Vault.LoginAuto "Nom_coffre", 0
If Info_general.CBox_type.Value = ("Pince W25") Then
'Ouverture du fichier correspond au besoin choisi dans la liste
'Chemin à changer lors du changement d'emplacement des fichiers EXEMPLE : Lors de l'insertion dans l'ePDM
If CBox_etat.Value = ("Pince finie") Then
Set File = Vault.GetFileFromPath("Chemin + nom de fichier", Folder)
Set Part = swApp.OpenDoc6("Chemin + nom de fichier", 1, 0, "", longstatus, longwarnings)
swApp.ActivateDoc2 "Nom fichier", False, longstatus
'Activation du modèle ouvert, nécessaire pour accéder à la famille de pièces
Set swModel = swApp.ActiveDoc
'Récupération de la famille de pièces
Set swDesignTable = swModel.GetDesignTable()
'Si récupération correcte de la famille de pièces
If Not swDesignTable Is Nothing Then...........................
Oto część mojego kodu, a błąd "obiekt nie jest ustawiony" pojawia się w wierszu odzyskiwania rodziny części.
Dziękuję za pomoc.
Ustaw swDesignTable = swModel.GetDesignTable bez ()?
i przyciemnij swDesignTable jako SldWorks.DesignTable
W linii:
Vault.LoginAuto "Nom_coffre", 0
Nie podałeś nazwy swojego sejfu, wątpię, żeby nazywał się Nom_coffre.
To samo w wierszach:
Set File = Vault.GetFileFromPath("Ścieżka + Nazwa pliku", Folder)
Ustaw część = swApp.OpenDoc6("Ścieżka + nazwa pliku", 1, 0, "", longstatus, longwarnings)
lub Ścieżka + nazwa pliku powinna być nazwą pliku wraz ze ścieżką, a więc w postaci "C:\Vault-BE\TEST\TestFile.sldprt", na przykład
Pozdrowienia
Tak, tak , d.roger , nie martw się, zmieniłem to ^^. Właśnie usunąłem nazwiska, aby umieścić je na forum ;).
Cyril.f próbowałem, ale nadal nie działa.
Edycja: Myślę, że ma to wpływ, ale kiedy uruchamiam mój File, Part i swDesigntable = Nic się nie zmienia krok po kroku, ale nie widzę problemu, działa to, jeśli ręcznie załaduję poprzednią wersję.
Witam
Czy Twój plik dobrze otwiera się w oprogramowaniu?
Przykład użycia GetDesignTable w VBA: http://help.solidworks.com/2013/English/api/sldworksapi/Get_Design_Table_Example_VB.htm
Spróbuj także dodać linię
Plik.GetFileCopy (0)
tuż za linią
Vault.GetFileFromPath("Le_nom_de_ton_fichier_avec_le_chemin", Folder)
Pozdrowienia
Właśnie wstawiłem linię, którą mi wskazałeś, a błąd jest w tym wierszu, ten sam błąd.
Tak, mój plik dobrze otwiera się w oprogramowaniu, a moje makro działa wspaniale, o ile wcześniej kliknąłem na mój plik, aby "Pobierz najnowszą wersję".
Potwierdza to, że jest to rzeczywiście powód błędu.
Edycja: jeśli chodzi o korzystanie z GetDesignTable, używam go zgodnie ze wskazaniami.
Ja tego nie widzę. Dla Twojej informacji, nie mam żadnego błędu operacyjnego z następującym makrem:
Dim swApp As Object
Przyciemnij część jako obiekt
Dim boolstatus As Boolean
Dim longstatus As Long, longwarnings As Long
Sub main()
Ustaw swApp = Application.SldWorks
Dim Vault jako nowy EdmVault5
Przyciemnij plik jako IEdmFile5
Przyciemnij folder jako IEdmFolder5
Vault.LoginAuto "Coffre_BE", 0
Set File = Vault.GetFileFromPath("C:\Coffre_BE\TEST\0088880001.SLDPRT", Folder)
Ustaw część = swApp.OpenDoc6(Folder.LocalPath & "/" & File.Name, 1, 2, "", longstatus, longwarnings)
swApp.ActivateDoc2 File.Name, Fałsz, longstatus
Ustaw swModel = swApp.ActiveDoc
swModel.ViewZoomtofit2
Koniec subwoofera
Jedynym komunikatem, jaki otrzymuję, jest to, że Epdm mnie, czy chcę wyodrębnić plik po jego załadowaniu, normalna wiadomość, ponieważ tak nie jest. FYI Nie potrzebuję wiersza GetFileCopy.
Jestem na wersji z 2015 roku.
Pozdrowienia