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.
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);
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.
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
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.
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
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.
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.
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.
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
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:
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.
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.
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.
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.