Ich habe derzeit ein Makro, das eine 3D-Datei mit einer Familie von Teilen öffnet, die der Benutzer in einer Liste ausgewählt hat, sowie die zugehörige Zeichnung. In einigen Fällen benötigen meine Kollegen die Datei möglicherweise im STEP-Format, daher wende ich mich zur Klärung an Sie, um diesen Vorgang mit einem Makro durchzuführen. Folgendes möchte ich tun:
- Bieten Sie dem Benutzer die STEP-Dateiaufzeichnung des bereits geöffneten Teils über einen "OptionButton" an, - Wenn der Button ausgewählt ist, möchte ich die Datei in STEP unter einem anderen Namen speichern: STEP_"Name vorher pro Benutzer eingegeben" - In einer anderen Datei, die nur STEP auf dem Server hosten soll, mit einem einfachen Pfad C:\Users\.......\STEP\STEP_"Name, der zuvor pro Benutzer eingegeben wurde". SCHRITT
Ich habe bereits den Makrorekorder durchgesehen, aber ich bekomme nur:
Dim swApp As Object
Dim Part As Object
Dim boolstatus As Boolean
Dim longstatus As Long, longwarnings As Long
Sub main()
Set swApp = _
Application.SldWorks
Set Part = swApp.ActiveDoc
longstatus = Part.SaveAs3("C:\Users\cbr\Desktop\CAO W25\STEP\STEP.STEP", 0, 0)
End Sub
Aber kommt mir das ganz leicht vor oder ist es wirklich "so einfach"?
Auch hier ist alles in der API-Hilfe von SW: http://help.solidworks.com/2017/english/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.imodeldocextension~saveas.html
und um die Exportoptionen festzulegen: http://help.solidworks.com/2017/english/api/swconst/filesaveasstepoptions.htm
Also ja, das ist es auch, aber nein, es wird nichts für Sie sein, weil Sie im maco cbr durch den Benutzernamen ersetzen müssen, der theoretisch bei jedem Beitrag anders ist, es ist das einzige Problem, das ich sehe, ah und auch eine Variable für den Dateinamen :)
EDIT a priori diese Zeile würde Ihr Problem mit verschiedenen Umgebungsvariablen beantworten
Remrem Ich habe die Frage direkt im Forum gestellt, weil ich dachte, dass ich schneller Lösungen finden würde, da die Dinge bereits erledigt waren (was auch der Fall ist). Und vermeiden Sie es, auf die Erklärungen der API zu stoßen (was auch der Fall ist..), weil ich die Parameter Option und ExportData nicht verstehe. Ich verstehe noch weniger, warum diese Syntax beim Rekorder nicht beachtet wird.
MaD, dieser Aufzeichnungspfad ist temporär für meine Tests, aber in Wirklichkeit wird es ein Ort auf dem Server sein, also denke ich, dass er dieses Problem löst. Die Variable mit dem Namen ist bereits erstellt und wird :) verwendet. Ich verstehe nicht wirklich, was diese Linie macht? A quo icorrespond ("WScript.Shell") bitte?
SA ermöglicht es Ihnen, ein bestimmtes Objekt zu erstellen, das es Ihnen ermöglicht, Systemvariablen abzurufen, wir sind uns der reinen Programmierung sicherer als des SW-Makros
Wenn Sie ein einfaches Speichern unter und Schritt durchführen möchten. Davon abgesehen sehe ich nicht wirklich den Sinn darin, ein Makro für drei Klicks zu erstellen...
Wenn Sie die Einstellungen erzwingen möchten, um sicherzustellen, dass Ihr Export so ist, wie Sie es möchten und nicht gemäß den PC-Einstellungen, dann wird alles in der Hilfe erklärt.
Versuchen Sie, einen Code wie erklärt zu schreiben und wenn Sie auf ein Problem stoßen. Kommen Sie zurück zu uns und wir werden versuchen, es Ihnen zu erklären oder zu beraten... ;-)
Das ist genau mein Ziel, nun, es geht nicht darum, 3 Klicks zu vermeiden, sondern darum, immer den gleichen Ordnernamen, Dateinamen und den gleichen Datensatzpfad zu haben.
Also habe ich die einfache Lösung ausprobiert und sie funktioniert in einem Fall, aber nicht in einem anderen:
'Pour l'enregistrement en fichier STEP
If Check_step.Value = True Then
EnregistrementSTEP = Part.SaveAs3("C:\Users\cbr\Desktop\CAO W25\STEP\STEP_" & ActiveConfiguration & ".STEP", 0, 0)
MsgBox "Le fichier STEP a été enregistré dans le dossier suivant : C:\Users\cbr\Desktop\CAO W25\STEP" & Chr(10) & "Sous le nom suivant : STEP_" & ActiveConfiguration, vbInformation, "Emplacement du fichier"
End If
Ich habe genau den gleichen Code. In einem Fall funktioniert es und im anderen erhalte ich die Fehlermeldung "Laufzeitfehler '91'", aber ich sehe nicht, was falsch ist. Wahrscheinlich ein undefiniertes Element, aber ich sehe es nicht.
Ich habe gerade herausgefunden, dass die SaveAs3-Methode im Jahr 2017 veraltet ist. Wir müssen jetzt dies verwenden: http://help.solidworks.com/2017/english/api/sldworksapi/SOLIDWORKS.Interop.sldworks~SOLIDWORKS.Interop.sldworks.IModelDocExtension~SaveAs.html
Au! Ich muss einen Teil meiner Bewerbung in VB.net überprüfen....
Bearbeiten: Achten Sie auf diesen Absatz:
"Um als IGES-, STL- oder STEP-Datei zu speichern, muss das zu konvertierende Dokument das aktive Dokument sein. Bevor Sie diese Methode aufrufen:
Rufen Sie ISldWorks::ActivateDoc3 auf, um das Dokument in das aktive Dokument zu konvertieren.
Verdammt, es stimmt, dass sich der Code je nach SW-Version ändert... Ich bin im Jahr 2015, also funktioniert SaveAs3 zu Hause, aber SaveAs funktioniert nicht... Ja, danke, das ist mir aufgefallen, nachdem ich meinen Kommentar gepostet habe.
Gibt es eine Möglichkeit, eine vorhandene Tabelle, die es Ihnen ermöglicht, "veraltete Methoden" zu kennen, bitte? Denn ohne das wird es mir Probleme bereiten.
Äh, die veralteten Funktionen sind nicht mehr nutzbar. Ich verwende immer noch vba-Makros in SaveAs2 auf SW2016 und es funktioniert sehr gut (für Exporte in step, stl, iges, pdf)
Die Verfügbarkeit oder Nichtverfügbarkeit einiger SW-Funktionen hängt von der referenzierten DLL ab.
Aus dem Arbeitsspeicher erstellt VBA keine Kopie der referenzierten DLLs, sondern verwendet die verfügbare. Es kann vorkommen, dass einige Funktionen in neueren DLLs entfernt wurden.
Dassault macht sich nicht die Mühe, seine DLLs zu reparieren, sondern fügt Funktionen, Parameter und Prozeduren nach Bedarf hinzu.
Dies hat zumindest einen Vorteil, nämlich dass Sie abwärtskompatible Makros schreiben können, die aber auch mit späteren Versionen kompatibel sind, jedoch mit dem Verlust bestimmter Funktionen.