Ik heb een probleem met het openen van mijn EDPM-bestanden via mijn macro. In mijn huidige project moest ik een macro maken om mijn bestanden te openen die zijn opgeslagen in de EPDM-kluis of wanneer ik mijn macro start, wat heel goed werkt wanneer de onderdelen op mijn bureaublad staan, de macro gaat naar Debug:
Bij het uitvoeren van de macro worden de bestanden niet uit EPDM geëxtraheerd en dit is een wens om het alleen-lezen te hebben. Ik heb dit probleem op mijn werkplek met mijn EPDM-sessie, met mijn sessie op een andere werkplek en op een andere werkplek met een andere sessie, dus niets te maken met de psote of de sessie.
Maar ik ontdekte iets: Als ik EPDM open in Windows Verkenner en ik klik op mijn deel (geen dubbelklik gewoon om het in het voorbeeld te hebben) heb ik een venster dat wordt geopend:
En na deze lading, die niet 3 uur duurt zoals aangegeven, werkt mijn macro wonderwel.
Dus ik vroeg me af of iemand wist waar dit vandaan kwam en misschien een probleem in de autoload op te lossen?
Een laatste punt, ik moet, om mijn macro te laten werken, om te klikken Alleen op 3D-bestanden, tekeningen zijn geen probleem voor mij.
In je macro moet je beginnen met verbinding maken met je kluis en vervolgens de nieuwste versie van je bestand downloaden voordat je het opent, ik weet niet hoe het is geschreven in VBA, maar hier is een voorbeeld in C#:
vault1 = nieuwe EdmVault5();
als (!vault1. Is ingelogd) { kluis1. LoginAuto("Uw kluis", dit. Handvat.ToInt32()); }
IEdmFile5 file3D = standaard(IEdmFile5);
IEdmFolder5 mapBOM = null;
file3D = kluis1. GetFileFromPath("Uw bestand", uit mapBOM);
Hartelijk dank voor uw antwoord, want het stelt me gerust te weten dat er een oplossing is! Aan de andere kant begin ik enige kennis van Vba te krijgen, maar meer ook niet en ik weet niets van C#-taal, dus ik wacht op andere antwoorden om te weten hoe ik in Vba moet volgen.
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
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.
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
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.
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.
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.
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
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
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.
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.
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.
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.