Vba - EPDM Verknüpfung

In EPDM mit Windows Explorer

die Tatsache, dass als Einstellung "Miniatur-SW 3D"

dass die letzte Registerkarte, die in EPDM verwendet wird, "Vorschau" ist

und wählen Sie eine neue Datei aus,

Dies führt automatisch ein "Get" für die Datei durch (wenn keine zwischengespeicherte Version auf dem PC vorhanden ist)

 

Wenn wir dann bereits eine Version im "Cache" haben, ohne die letzte zu sein,

Es gibt kein "Auto Get" mit der Registerkarte "Forecast"

Dieses Verhalten kann jedoch je nach Benutzer-/Gruppeneinstellungen geändert werden.

(z. B. dem Benutzer die Verwaltung zwischengespeicherter Versionen zu überlassen oder die neueste Version zu erzwingen usw.)

1 „Gefällt mir“

Hallo

Ich glaube, dies ist eine Einschränkung der SW-API in VBA. Denn wenn man in der Hilfe nach keiner Dokumentation in VBA sucht: http://help.solidworks.com/SearchEx.aspx?q=EdmVault5&sort=&version=2017&lang=english&prod=api

1 „Gefällt mir“

Hallo, wenn die APIs in .net vorhanden sind, denke ich, dass sie auch in VBA vorhanden sind.

Um Ihnen zu helfen, können Sie den Code, den Sie erhalten haben, in einen C#-VB.net Konverter kopieren. Mehrere davon finden Sie im Internet. Da Vba von vb.net stammt, ist der Code nah genug, damit Sie ihn verstehen können.

Aus dem Arbeitsspeicher muss eine DLL geladen werden, um auf die PDM-Objekte zuzugreifen.

Herzliche Grüße.

1 „Gefällt mir“

Yves.T :

Es ist kein Konverter erforderlich, es gibt viele Beispiele in vb.net. Hier sind einige Links: http://help.solidworks.com/2017/english/api/epdmapi/Traverse_Folders_and_Files_in_Vault_Example_VBNET.htm

1 „Gefällt mir“

Hallo

Es gibt tatsächlich eine DLL zu laden, es ist "EPDM. Interop.epdm.dll", das sich im SOLIDWORKS Enterprise PDM Installationsverzeichnis befindet.

Herzliche Grüße

1 „Gefällt mir“

Hallo nochmal,

Sie können ein neues Makro mit den folgenden Zeilen einspielen:

     Dimmen swApp als Objekt

     Teil als Objekt dimmen
     Dim boolstatus als boolescher Wert
     Dim longstatus As Long, longwarnings As Long

     Sub main()

         Legen Sie swApp = Application.SldWorks fest

         Dim Vault als neues EdmVault5

         Dim-Datei als IEdmFile5
         Dim-Ordner als IEdmFolder5

         Vault.LoginAuto "Le_nom_de_ton_coffre-stark", 0

         Set File = Vault.GetFileFromPath("Le_nom_de_ton_fichier_avec_le_chemin", Ordner)
    
         Set Part = swApp.OpenDoc6("Le_nom_de_ton_fichier_avec_le_chemin", 1, 0, "", longstatus, longwarnings)

     Ende Sub

Vergessen Sie nicht, den Namen des Tresors und den Dateinamen zu ändern.

Herzliche Grüße

1 „Gefällt mir“

Hallo ihr alle

Da ich an 2 Projekten gleichzeitig arbeite, war ich noch nicht in der Lage, Tests durchzuführen, aber ich sollte es heute können, auf der anderen Seite habe ich einige Fragen nach Ihren Antworten:

- Für die geladene ddl weiß ich nicht, wie ich das machen soll... Handelt es sich um eine Datei zum Herunterladen? Eine Datei, die nur mit meinen Teilen verknüpft werden soll?
- In den Codes, die ich durchgehen konnte, wie z.B. d.roger   ist mir aufgefallen, dass es eine LoginAuto-Funktion gibt, wie funktioniert sie? Da ich über dieses Fenster eine Verbindung zu EPDM herstellen muss:

Wird diese Funktion mit meiner üblichen Anmeldemethode in Konflikt stehen? Vielleicht interpretiere ich den Begriff "Auto" falsch.

Denn im Idealfall möchte ich, dass es beim Start des Makros eine Verbindungsprüfung zu EPDM gibt (dank des Fensters oben) und wenn ja, dann laden Sie die Dokumente bei Bedarf in den Cache.

Aber bevor ich in den Code einsteige, wäre es nicht einfacher, die EPDM-Einstellungen wie "Cache beim Abmelden löschen"  oder andere wie im Anhang zu ändern.

Vielen Dank für Ihre großartige Hilfe


para_epdm.png

Hallo

Für die Verbindung wird es keine Konflikte geben. LoginAuto verwendet lokale Verbindungsparameter, so dass das Fenster angezeigt wird, wenn Login/MDP bei der Anmeldung angefordert wird.

Wenn es darum geht, den Cache zu leeren, wenn Sie sich abmelden, müssen Sie wirklich die Vor- und Nachteile abwägen. Dies wirkt sich auf die extrahierten Dateien aus (insbesondere die Assemblys, wenn mein Speicher korrekt ist) und kann zum Verlust von Arbeit führen. Es hängt alles von Ihren Archivierungsregeln und der Strenge Ihrer Benutzer ab.

Im Übrigen gibt es in vba zwar keine Beispiele mehr (auf der 2009 gab es welche), aber von VB.NET aus kann man sich zurechtfinden. Es wird jedoch weiterhin Funktionen geben, die für C# und VB.NET reserviert sind.

 

2 „Gefällt mir“

Hallo

Damit die DLL geladen werden kann, ist dies für Programme in C# notwendig. In VBA müssen Sie nur auf "PDMWorks Enterprise 20xx Type Library" in Ihrem Makro verweisen, siehe das angehängte Bild.

Für das Anmeldefenster siehe die Antwort von Cyril.f oben.

Ansonsten denke ich, dass es interessanter ist, eine Sprache wie VB.net oder C# zu lernen, die es Ihnen ermöglicht, viel mehr Dinge zu tun, entweder in Form von Makros oder in Form von unabhängigen Programmen, mit denen Sie EPDM und/oder SolidWorks einfach steuern können, aber das ist nur eine persönliche Meinung. Es gibt ausgezeichnete Kurse zum Erlernen dieser Sprachen auf verschiedenen Websites wie z.B. https://openclassrooms.com/courses/apprenez-a-developper-en-c

Herzliche Grüße


references.png
2 „Gefällt mir“

Ich denke, es wird für Sie nützlich sein. Darüber hinaus ist es sehr interessant.

Die VB.net ähnelt eher der VBA. Das Lernen wird einfacher.

Persönlich verwende ich das EDi Visual Studio in der Community-Version: https://www.visualstudio.com/fr/thank-you-downloading-visual-studio/?sku=Community&rel=15

Ich empfehle auch die hervorragenden developpez.com:

Das .net-Forum

.net-Kurse

Die .net FAQ

Der Visual Studio-Abschnitt

 

Auf der rechten Seite:

Wie führt man C- oder VB.net Code als Makros in SW aus?

 

 

 

2 „Gefällt mir“

Für dieses Projekt werde ich versuchen, mit dem VBA zufrieden zu sein, da ich ein Praktikum mache und leider nicht eingestellt werde und die Leute, die mein Programm nutzen werden, kaum die Grundlagen von VBA kennen...

Aber für zukünftige Anwendungen werde ich mich mehr damit beschäftigen. Auf der anderen Seite habe ich eine sehr dumme Frage, wie ist es besser als das Vba? Mehr Möglichkeiten? Sind sie auch Programme, die in einem bestimmten Modul einer Software codiert werden sollen oder sind sie eigenständig? (Nur kleine Fragen, um eine Vorstellung zu bekommen, bevor ich mit dem Lernen beginne)

Das Vb.net ist in der Tat viel ähnlicher an VBA und daher leichter zu erlernen, C# ist viel weniger "wortreich", es ist Geschmackssache.

Für Makros in C# oder VB.net in SW erstelle ich DLLs und wenn ich neue Schaltflächen in SW einfüge, verwende ich diese DLLs, siehe beigefügtes Bild. Am Ende habe ich eine DLL erstellt, die nur zum Lesen einer Textdatei verwendet wird, in die ich den Pfad meiner ausführbaren Hauptdatei einfüge, und um diese ausführbare Datei dann zu starten, kann ich viel mehr Flexibilität bei meinen Programmen haben.

Für meine Programme verwende ich die Open-Source-IDE SharpDevelop.

Herzliche Grüße


capture-2.png
1 „Gefällt mir“

Inwiefern ist es besser als das Vba? Mehr Möglichkeiten? : Visual Basic for Applications (VBA) ist eine Implementierung von Microsoft Visual Basic, VB.NET oder C# eigenständige Programmiersprachen sind. VIEL mehr Möglichkeiten.

Sind sie auch Programme, die in einem bestimmten Modul einer Software codiert werden sollen oder sind sie eigenständig? Unabhängige Programmierung (Erstellen von ausführbaren Dateien) mit einer IDE wie Visual Studio Community oder Sharpdevelop macht die Arbeit viel einfacher.

2 „Gefällt mir“

In der Tat sieht es interessanter aus! Also ist es beschlossen, dass ich nach meinem Projekt dazu übergehe, VB.net zu lernen.

Aber in Bezug auf mein Problem habe ich das Makro von d.roger ausprobiert und der Anfang scheint zu funktionieren, denn wenn ich auf eine Auswahl klicke, habe ich das EPDM-Verbindungsfenster, das sich öffnet.

Aber die folgende Zeile scheint ihre Aufgabe nicht zu erfüllen, es sei denn, sie behebt mein Problem nicht:

'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 ist ein Teil meines Codes und der Fehler "Objekt nicht festgelegt"  wird in der Wiederherstellungszeile der Teilefamilie angezeigt.

Danke für Ihre Hilfe.

Legen Sie swDesignTable = swModel.GetDesignTable ohne das ()?

und dim swDesignTable als SldWorks.DesignTable

In der Zeile:

Vault.LoginAuto "Nom_coffre", 0

Du hast den Namen deines Safes nicht eingegeben, ich bezweifle, dass er Nom_coffre heißt.

Dasselbe in den Zeilen:

Set File = Vault.GetFileFromPath("Pfad + Dateiname", Ordner)
Set Part = swApp.OpenDoc6("Pfad + Dateiname", 1, 0, "", longstatus, longwarnings)

oder Pfad + Dateiname sollte der Name Ihrer Datei mit ihrem Pfad sein, also in der Form "C:\Vault-BE\TEST\TestFile.sldprt" zum Beispiel

Herzliche Grüße

Ja, ja, D.Roger , mach dir keine Sorgen, ich habe es ^^ geändert. Ich habe gerade die Namen entfernt, um sie in das Forum ;) zu stellen.

Cyril.f Ich habe es versucht, aber es funktioniert immer noch nicht.

Bearbeiten: Ich denke, es hat Auswirkungen, aber wenn ich meine Datei, Part und swDesigntable = Nichts Schritt für Schritt ausführe, aber ich sehe das Problem nicht, dass es funktioniert, wenn ich die vorherige Version manuell lade.

Hallo

Lässt sich Ihre Datei gut in SW öffnen?

Ein Beispiel für die Verwendung von GetDesignTable in VBA: http://help.solidworks.com/2013/English/api/sldworksapi/Get_Design_Table_Example_VB.htm

Versuchen Sie auch, die Zeile hinzuzufügen

Datei.GetFileCopy (0)

Kurz nach der Linie

Vault.GetFileFromPath("Le_nom_de_ton_fichier_avec_le_chemin", Ordner)

Herzliche Grüße

Ich habe gerade die Zeile eingefügt, auf die Sie mich hingewiesen haben, und der Fehler befindet sich in dieser Zeile, derselbe Fehler.

Ja, meine Datei öffnet sich gut in SW und mein Makro funktioniert wunderbar, solange ich vorher auf meine Datei geklickt habe, um "Die neueste Version zu holen". 

Dies bestätigt, dass dies tatsächlich der Grund für den Fehler ist.

Bearbeiten: In Bezug auf die Verwendung von GetDesignTable verwende ich es wie angegeben.

Ich sehe es nicht. Zu Ihrer Information, ich habe keinen Bedienungsfehler mit dem folgenden Makro:

Dimmen swApp als Objekt

Teil als Objekt dimmen
Dim boolstatus als boolescher Wert
Dim longstatus As Long, longwarnings As Long

Sub main()

    Legen Sie swApp = Application.SldWorks fest

    Dim Vault als neues EdmVault5

    Dim-Datei als IEdmFile5
    Dim-Ordner als IEdmFolder5

    Vault.LoginAuto "Coffre_BE", 0

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

Ende Sub

Die einzige Nachricht, die ich bekomme, ist, dass das Epdm mich fragt, ob ich die Datei extrahieren möchte, wenn sie geladen wird, eine normale Nachricht, da dies nicht der Fall ist. Zu Ihrer Information: Ich brauche die GetFileCopy-Zeile nicht.

Ich bin bei der Version von 2015.

Herzliche Grüße