Vba - EPDM Verknüpfung

Hallo ihr alle

Ich habe ein Problem beim Öffnen meiner EDPM-Dateien über mein Makro. In meinem aktuellen Projekt musste ich ein Makro erstellen, um meine Dateien zu öffnen, die im EPDM-Tresor gespeichert sind, oder wenn ich mein Makro starte, was sehr gut funktioniert, wenn sich die Teile auf meinem Desktop befinden, geht das Makro in Debug:

Beim Ausführen des Makros werden die Dateien nicht aus EPDM extrahiert, und es ist wünschenswert, dass es schreibgeschützt ist. Ich habe dieses Problem auf meiner Workstation mit meiner EPDM-Sitzung, mit meiner Session auf einer anderen Workstation und auf einer anderen Workstation mit einer anderen Sitzung, also nichts mit dem PSOTE oder der Sitzung zu tun.

Aber ich habe etwas entdeckt: Wenn ich EPDM im Windows Explorer öffne und auf mein Teil klicke (kein Doppelklick, einfach klicken, um es in der Vorschau zu haben), habe ich ein Fenster, das sich öffnet:

Und nach diesem Laden, der nicht wie angegeben 3 Stunden dauert, funktioniert mein Makro wunderbar.

Also habe ich mich gefragt, ob jemand weiß, woher das kommt, und vielleicht ein Problem im Autoload behebt?

Ein letzter Punkt, den ich brauche, damit mein Makro funktioniert, auf Nur auf 3D-Dateien zu klicken, Zeichnungen sind für mich kein Problem.

Guten Tag

 


capture_error.png

Hallo

In Ihrem Makro müssen Sie zunächst eine Verbindung zu Ihrem Tresor herstellen und dann die neueste Version Ihrer Datei abrufen, bevor Sie sie öffnen, ich weiß nicht, wie sie in VBA geschrieben ist, aber hier ist ein Beispiel in C #:

vault1 = neues EdmVault5();

if (!vault1. IsLoggedIn)
{
      vault1. LoginAuto("Ihr Safe", dieses. Handle.ToInt32());
}

IEdmDatei5 Datei3D = Standard(IEdmDatei5);

IEdmFolder5 OrdnerBOM = null;

file3D = vault1. GetFileFromPath("Ihre Datei", out folderBOM);

file3D.GetFileCopy(dieses. Handle.ToInt32(), "");

Herzliche Grüße

1 „Gefällt mir“

 Hallo d.roger,

Vielen Dank für Ihre Antwort, denn es beruhigt mich zu wissen, dass es eine Lösung gibt!
Auf der anderen Seite fange ich an, einige Kenntnisse über Vba zu haben, aber nicht mehr und ich weiß nichts über die Sprache C #, also warte ich auf andere Antworten, um zu wissen, wie man in Vba folgt.

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.