Vba - EPDM Koppeling

In EPDM met Windows Verkenner,

het feit dat het als instelling "miniatuur SW 3D" heeft

dat het laatste tabblad dat in EPDM wordt gebruikt, "Voorbeeld" is

en selecteer een nieuw bestand,

Dit maakt automatisch een "get" op het bestand (als er geen versie in de cache op de pc is)

 

Als we dan al een versie in "cache" hebben zonder de laatste te zijn,

er is geen "automatisch ophalen" met het tabblad "Voorspelling"

Maar dit gedrag kan worden gewijzigd, afhankelijk van de instellingen van de gebruiker/groep.

(zoals de gebruiker de gecachete versies laten beheren, of de nieuwste versie forceren, enz...)

1 like

Hallo

Ik geloof dat dit een beperking is van de SW API in VBA. Want als je in de help kijkt voor geen documentatie in VBA: http://help.solidworks.com/SearchEx.aspx?q=EdmVault5&sort=&version=2017&lang=english&prod=api

1 like

Hallo, als de API's bestaan in .net, denk ik dat ze ook bestaan in vba.

Om je te helpen, kun je de code die je hebt gekregen kopiëren naar een C# VB.net-converter. Je kunt er verschillende vinden op internet. Aangezien Vba is ontleend aan vb.net, zal de code dichtbij genoeg zijn om te begrijpen.

Vanuit het geheugen is er een dll die moet worden geladen om toegang te krijgen tot de pdm-objecten.

Vriendelijke groeten.

1 like

Yves.T :

Een converter is niet nodig, er zijn veel voorbeelden in vb.net. Hier zijn verschillende links: http://help.solidworks.com/2017/english/api/epdmapi/Traverse_Folders_and_Files_in_Vault_Example_VBNET.htm

1 like

Hallo

Er is inderdaad een DLL om te laden, het is "EPDM. Interop.epdm.dll" die zich bevindt in de SOLIDWORKS Enterprise PDM-installatiemap.

Vriendelijke groeten

1 like

Hallo weer,

U kunt het proberen in een nieuwe macro met de volgende regels:

     Dim swApp als object

     Deel dimmen als object
     Dim boolstatus als Booleaanse
     Dim longstatus As Long, longwarnings As Long

     Sub hoofd()

         Stel swApp = Toepassing.SldWorks in

         Dim Vault als nieuwe EdmVault5

         Bestand dimmen als IEdmFile5
         Map dimmen als IEdmFolder5

         Vault.LoginAuto "Le_nom_de_ton_coffre-sterk", 0

         Bestand instellen = Vault.GetFileFromPath("Le_nom_de_ton_fichier_avec_le_chemin", map)
    
         Deel instellen = swApp.OpenDoc6("Le_nom_de_ton_fichier_avec_le_chemin", 1, 0, "", longstatus, longwarnings)

     Einde Sub

Vergeet niet de naam van de kluis en de bestandsnaam te wijzigen.

Vriendelijke groeten

1 like

Hoi allemaal

Omdat ik op 2 projecten tegelijk ben, heb ik nog geen tests kunnen uitvoeren, maar dat zou ik vandaag wel moeten kunnen, aan de andere kant heb ik enkele vragen naar aanleiding van uw antwoorden:

- Voor de ddl geladen, ik weet niet hoe ik het moet doen... Is het een bestand om te downloaden? Een bestand om alleen aan mijn onderdelen te koppelen?
- In de codes die ik kon doorlopen zoals die van d.roger  merkte ik dat er een LoginAuto-functie was, hoe werkt het? Omdat ik via dit venster verbinding moet maken met EPDM:

Is deze functie in strijd met mijn gebruikelijke inlogmethode? Misschien interpreteer ik de term "Auto" verkeerd.

Omdat ik idealiter zou willen dat er bij het starten van de macro een verbindingscontrole is naar EPDM (dankzij het venster hierboven) en zo ja, laad dan de documenten in de cache wanneer dat nodig is.

Maar voordat ik ingaan op de code, zou het niet gemakkelijker zijn om de EPDM-instellingen te wijzigen, zoals "Cache wissen bij uitloggen"  of iets dergelijks in de bijlage.

Bedankt voor je geweldige hulp


para_epdm.png

Hallo

Voor de verbinding zal het niet conflicteren. LoginAuto maakt gebruik van lokale verbindingsparameters, dus als login/mdp wordt gevraagd bij het inloggen, wordt het venster weergegeven.

Als het gaat om het wissen van de cache wanneer je uitlogt, moet je echt de voor- en nadelen afwegen. Dit heeft een impact op de uitgepakte bestanden (de assemblages, vooral als mijn geheugen correct is) en kan het verlies van werk genereren. Het hangt allemaal af van uw archiveringsregels en de nauwkeurigheid van uw gebruikers.

Voor de rest zijn er inderdaad geen voorbeelden meer in vba (op de 2009 waren die er wel) maar van VB.NET kun je je weg vinden. Er zijn echter nog steeds functies gereserveerd voor C# en VB.NET.

 

2 likes

Hallo

Om de DLL te laden is dit nodig voor programma's in C#. In VBA hoeft u alleen maar te verwijzen naar "PDMWorks Enterprise 20xx Type Library" in uw macro, zie de bijgevoegde afbeelding.

Voor het inlogvenster, zie het antwoord van Cyril.f hierboven.

Anders denk ik dat het interessanter is om te beginnen met het leren van een taal zoals VB.net of C# waarmee je veel meer dingen kunt doen, hetzij in de vorm van macro's, hetzij in de vorm van onafhankelijke programma's waarmee je gemakkelijk EPDM en/of SolidWorks kunt beheren, maar dat is slechts een persoonlijke mening. Er zijn uitstekende cursussen voor het leren van deze talen op verschillende sites, zoals https://openclassrooms.com/courses/apprenez-a-developper-en-c

Vriendelijke groeten


references.png
2 likes

Ik denk dat het nuttig voor je zal zijn. Bovendien is het erg interessant.

De VB.net lijkt meer op de VBA. Leren zal gemakkelijker zijn.

Persoonlijk gebruik ik de EDi Visual Studio in Community versie: https://www.visualstudio.com/fr/thank-you-downloading-visual-studio/?sku=Community&rel=15

Ik raad ook de uitstekende developpez.com aan:

Het .net forum

.NET Cursussen

De .net FAQ

De sectie Visual Studio

 

Naar rechts:

Hoe voer je C of VB.net code uit als macro's in SW?

 

 

 

2 likes

Voor dit project ga ik proberen tevreden te zijn met de Vba omdat ik stage loop en helaas niet word aangenomen en de mensen die mijn programma gaan gebruiken nauwelijks de basis van Vba hebben...

Maar voor toekomstige toepassingen zal ik er meer bij stilstaan. Aan de andere kant heb ik een hele domme vraag, hoe is het beter dan de Vba? Meer mogelijkheden? Zijn het ook programma's die in een specifieke module van een software moeten worden gecodeerd of is deze onafhankelijk? (Gewoon kleine vragen om een idee te krijgen voordat ik begin met leren)

De Vb.net lijkt inderdaad veel meer op VBA en is daarom gemakkelijker te leren, C# is veel minder "langdradig", het is een kwestie van smaak.

Voor macro's in C# of VB.net in SW maak ik DLL's en als ik nieuwe knoppen in SW invoeg, gebruik ik deze DLL's, zie bijgevoegde afbeelding. Ik heb uiteindelijk een DLL gemaakt die alleen wordt gebruikt om een tekstbestand te lezen waarin ik het pad van mijn hoofduitvoerbare bestand heb geplaatst en vervolgens om dit uitvoerbare bestand te starten, kan ik veel meer flexibiliteit hebben in mijn programma's.

Voor mijn programma's gebruik ik de open source SharpDevelop IDE.

Vriendelijke groeten


capture-2.png
1 like

Hoe is het beter dan de Vba? Meer mogelijkheden? : Visual Basic for Applications (VBA) is een implementatie van Microsoft Visual Basic, VB.NET of C# zijn programmeertalen op zich. VEEL meer mogelijkheden.

Zijn het ook programma's die in een specifieke module van een software moeten worden gecodeerd of is deze onafhankelijk? Zelfstandig programmeren (het maken van uitvoerbare bestanden), met behulp van een IDE zoals Visual Studio Community of Sharpdevelop maakt het een stuk eenvoudiger.

2 likes

Het ziet er inderdaad interessanter uit! Dus na mijn project heb ik besloten om verder te gaan met het leren van VB.net.

Maar wat betreft mijn probleem, ik heb de macro van d.roger geprobeerd en het begin lijkt te werken, want als ik op een keuze klik, heb ik het EPDM-verbindingsvenster dat wordt geopend.

Maar de volgende regel lijkt zijn werk niet te doen, tenzij het mijn probleem niet oplost:

'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...........................
                
             

Hier is een deel van mijn code en de fout "object niet ingesteld"  verschijnt op de herstelregel van de onderdeelfamilie.

Dank u voor uw hulp.

Stel swDesignTable = swModel.GetDesignTable in zonder de ()?

en dim swDesignTable als SldWorks.DesignTable

In de lijn:

Vault.LoginAuto "Nom_coffre", 0

Je hebt de naam van je kluis niet gezet, ik betwijfel of hij Nom_coffre heet.

Hetzelfde in de regels:

Bestand instellen = Vault.GetFileFromPath("Pad + bestandsnaam", map)
Deel instellen = swApp.OpenDoc6("Pad + bestandsnaam", 1, 0, "", longstatus, longwarnings)

of Pad + bestandsnaam moet de naam van uw bestand zijn met zijn pad, dus in de vorm "C:\Vault-BE\TEST\TestFile.sldprt" bijvoorbeeld

Vriendelijke groeten

Ja ja d.roger maak je geen zorgen, ik heb het ^^ veranderd. Ik heb zojuist de namen verwijderd om op het forum te zetten ;).

Cyril.f Ik heb het geprobeerd, maar het werkt nog steeds niet.

Edit: Ik denk dat het een impact heeft, maar als ik mijn File, Part en swDesigntable = Niets varaibles stap voor stap, maar ik zie het probleem niet het werkt als ik de vorige versie handmatig laad.

Hallo

Opent uw bestand goed in SW?

Een voorbeeld van het gebruik van GetDesignTable in VBA: http://help.solidworks.com/2013/English/api/sldworksapi/Get_Design_Table_Example_VB.htm

Probeer ook de regel toe te voegen

Bestand.GetFileCopy (0)

net na de lijn

Vault.GetFileFromPath("Le_nom_de_ton_fichier_avec_le_chemin", map)

Vriendelijke groeten

Ik heb zojuist de regel ingevoegd die u mij hebt gewezen en de fout staat op deze regel, dezelfde fout.

Ja, mijn bestand opent goed in SW en mijn macro werkt wonderwel, zolang ik van tevoren op mijn bestand heb geklikt om "De nieuwste versie op te halen". 

Dit bevestigt dat dit inderdaad de reden is voor de bug.

Edit: wat betreft het gebruik van GetDesignTable gebruik ik het zoals aangegeven.

Ik zie het niet. Ter informatie: ik heb geen bedieningsfout met de volgende macro:

Dim swApp als object

Deel dimmen als object
Dim boolstatus als Booleaanse
Dim longstatus As Long, longwarnings As Long

Sub hoofd()

    Stel swApp = Toepassing.SldWorks in

    Dim Vault als nieuwe EdmVault5

    Bestand dimmen als IEdmFile5
    Map dimmen als IEdmFolder5

    Vault.LoginAuto "Coffre_BE", 0

    Bestand instellen = Vault.GetFileFromPath("C:\Coffre_BE\TEST\0088880001.SLDPRT", map)
    
    Set Part = swApp.OpenDoc6(Folder.LocalPath & "/" & File.Name, 1, 2, "", longstatus, longwarnings)
    
    swApp.ActivateDoc2 File.Name, False, longstatus
    
    Stel swModel = swApp.ActiveDoc in
    
    swModel.ViewZoomtofit2

Einde Sub

Het enige bericht dat ik krijg is dat de Epdm me vraagt of ik het bestand wil uitpakken wanneer het is geladen, een normaal bericht omdat dat niet het geval is. Ter info: ik heb de GetFileCopy-regel niet nodig.

Ik ben op de 2015 versie.

Vriendelijke groeten