| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS |
| |
| Von keytech in die 3DEXPERIENCE Plattform |
Autor
|
Thema: Web html per Knopfdruck aus Solid Works erstellen (2025 / mal gelesen)
|
xilefotto Mitglied Ingenieur
Beiträge: 19 Registriert: 20.06.2016 SW19, ED Pro 19
|
erstellt am: 18. Jan. 2019 10:57 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, hat jmd. bereits versucht ein web html (neu Edrawings Pro 2019) direkt über Solid Works API zu erstellen? Folgender Ablauf ist gewünscht: Baugruppe/Part geöffnet in Solid Works Knopfdruck (Solid Works Makro Button) -> startet Makro -> Web html der Baugruppe im gleichen Ordner der in SW geöffneten Baugruppe/ des Parts wird erstellt. (Name.html) Ich nutze die Makkrofunktion z. B. um pdfs zu erstellen. Leider fehlt mir der Transfer um Edrawings anzuzapfen und um mitzuteilen, dass genau das gleiche Teil/ die gleiche Baugruppe geöffnet und als web html gespeichert werden soll. Ein Tipp wäre super. Besten Dank im Voraus. Anbei mein Skript zum Erstellen von pdfs: Dim swApp As Object Dim Part As Object Dim Component As Object Dim saveFileName As String Dim response As Long Sub main() On Error GoTo ErrorHandler Set swApp = Application.SldWorks Set Part = swApp.ActiveDoc swApp.ActiveDoc.ActiveView.FrameState = 1 swApp.ActiveDoc.ActiveView.FrameState = 1 Part.EditSketch If (swApp.ActiveDoc.GetPathName = "") Then 'Abfrage ob Name vergeben wurde MsgBox ("Bitte zuerst Zeichnung speichern!") Exit Sub End If If Dir(Left(swApp.ActiveDoc.GetPathName, Len(swApp.ActiveDoc.GetPathName) - 7) + "_Fertigung1.pdf") = "" Then saveFileName = Left(swApp.ActiveDoc.GetPathName, Len(swApp.ActiveDoc.GetPathName) - 7) + "_Fertigung1.pdf" Part.SaveAs2 saveFileName, 0, True, False 'Speichern als PDF - Auschnitt - _Fertigung1 wenn noch nicht vorhanden Else If Dir(Left(swApp.ActiveDoc.GetPathName, Len(swApp.ActiveDoc.GetPathName) - 7) + "_Fertigung2.pdf") = "" Then saveFileName = Left(swApp.ActiveDoc.GetPathName, Len(swApp.ActiveDoc.GetPathName) - 7) + "_Fertigung2.pdf" Part.SaveAs2 saveFileName, 0, True, False ' Speichern als PDF - Auschnitt - _Fertigung2 wenn noch nicht vorhanden
Else response = MsgBox(prompt:="_Fertigung1 und _Fertigung2 existieren bereits wenn diese gelöscht werden sollen: OK", buttons:=vbOKCancel) If response = vbOK Then Kill (Left(swApp.ActiveDoc.GetPathName, Len(swApp.ActiveDoc.GetPathName) - 7) + "_Fertigung1.pdf") Kill (Left(swApp.ActiveDoc.GetPathName, Len(swApp.ActiveDoc.GetPathName) - 7) + "_Fertigung2.pdf") Else End If 'swApp.ActiveDoc.ActiveView.FrameState = 1 'Applicaiton.OnKey "{ENTER}" End If End If Exit Sub ErrorHandler: ' Error-handling routine. MsgBox ("PDF Reader schließen eine Datei ist in Benutzung") End Sub ------------------ Es gibt nichts Gutes außer man tut es
[Diese Nachricht wurde von xilefotto am 19. Jan. 2019 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CAD-Maler Mitglied Konstrukteur / CAD-Admin / Mädchen für alles
Beiträge: 720 Registriert: 17.01.2007 SWX 2019 SP5 AutoCAD 2019 Win 10 pro 64 bit Intel(R) Xeon(R) CPU E5-1650 v4 @ 3.60GHz 64GB RAM Nvidia Quadro M5000 SWx EPDM
|
erstellt am: 18. Jan. 2019 11:42 <-- editieren / zitieren --> Unities abgeben: Nur für xilefotto
Hallo! Die API-Hilfe für eDrawings findest du hier. Um SolidWorks-Dateien in eDrawing zu öffnen, habe ich bisher immer die shell-Funktion genutzt: Code:
'Pfad mit Argumenten basteln TEMP = Chr(34) & "C:\Program Files\SOLIDWORKS Corp 2017\eDrawings\EModelViewer.exe" & Chr(34) & " " & Chr(34) & "Dateipfad" & Chr(34) & " " & Chr(34) & "Dateiverzeichnis" & Chr(34) & " " & Chr(34) & FileID & Chr(34) & " " & Chr(34) & "17" & Chr(34) & " " & Chr(34) & "0" & Chr(34)Shell TEMP, vbNormalFocus
Den Pfad und die Argumente musst du sicherlich anpassen. Alternativ kannst du auch Code:
lRetVal = ShellExecute(0, "open", "C:\Program Files\SOLIDWORKS Corp 2017\eDrawings\EModelViewer.exe", "Dateipfad", "Dateiverzeichnis", SW_SHOWNORMAL)
versuchen. Mehr als Anzeigen habe ich aber bisher noch nicht gemacht. Gruß, Jens ------------------ CSWE =) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
xilefotto Mitglied Ingenieur
Beiträge: 19 Registriert: 20.06.2016 SW19, ED Pro 19
|
erstellt am: 18. Jan. 2019 12:12 <-- editieren / zitieren --> Unities abgeben:
|
CAD-Maler Mitglied Konstrukteur / CAD-Admin / Mädchen für alles
Beiträge: 720 Registriert: 17.01.2007 SWX 2019 SP5 AutoCAD 2019 Win 10 pro 64 bit Intel(R) Xeon(R) CPU E5-1650 v4 @ 3.60GHz 64GB RAM Nvidia Quadro M5000 SWx EPDM
|
erstellt am: 18. Jan. 2019 13:25 <-- editieren / zitieren --> Unities abgeben: Nur für xilefotto
Nicht wirklich. Hab ich noch nie benötigt. Das Problem wird dabei sein, dass du mit VBA die eDrawing-Applikation nicht gefangen bekommst. Evtl. kannst du dir das Öffnen aber auch sparen, wenn du direkt mit der EModelViewer-Bibliothek arbeitest. Da gibts einen Save-Befehl Gruß, Jens ------------------ CSWE =) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
xilefotto Mitglied Ingenieur
Beiträge: 19 Registriert: 20.06.2016 SW19, ED Pro 19
|
erstellt am: 19. Jan. 2019 08:58 <-- editieren / zitieren --> Unities abgeben:
Hi Jens, ich bin gerade dran deinen Code zu testen. Wie unterscheidest du Dateipfad und Dateiverzeichnis im Shell? Kannst du deinen Syntax beispielhaft füllen? Vielen Dank für deine Rückmeldung im Voraus? ------------------ Es gibt nichts Gutes außer man tut es Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
xilefotto Mitglied Ingenieur
Beiträge: 19 Registriert: 20.06.2016 SW19, ED Pro 19
|
erstellt am: 19. Jan. 2019 10:47 <-- editieren / zitieren --> Unities abgeben:
Derzeit habe ich noch SW18 und arbeite deshalb mit .htm. Leider bekomme ich Edrawings nicht geöffnet. Der Fehler entsteht ab Progpfad. Anbei der code: Dim swApp As Object Dim Part As Object Dim response As Long Dim Progpfad As String 'Programmpfad bisher nicht in Benutzung Dim Path As String 'Pfad der in Solidworks geöffneten Datei Sub main() On Error GoTo ErrorHandler Set swApp = Application.SldWorks Set Part = swApp.ActiveDoc swApp.ActiveDoc.ActiveView.FrameState = 1 Part.EditSketch If (swApp.ActiveDoc.GetPathName = "") Then MsgBox ("Bitte zuerstspeichern!") Exit Sub End If If Dir(Left(swApp.ActiveDoc.GetPathName, Len(swApp.ActiveDoc.GetPathName) - 7) + "_Fertigung.htm") = "" Then MsgBox ("Check") Path = swApp.ActiveDoc.GetPathName MsgBox (Path) 'gibt teilpfad aus 'klappt bis hier Progpfad = "eDrawings.exe, Path" 'hier entsteht der Fehler. Die File und Edrawings lassen sich nicht öffnen MyAppID = Shell(Progpfad, 1) Else response = MsgBox(prompt:="_Fertigung.htm existiert bereits soll diese gelöscht werden: OK", buttons:=vbOKCancel) If response = vbOK Then Kill (Left(swApp.ActiveDoc.GetPathName, Len(swApp.ActiveDoc.GetPathName) - 7) + "_Fertigung.htm") Else End If End If Exit Sub ErrorHandler: ' Error-handling routine. MsgBox ("Fehler!!!") End Sub ------------------ Es gibt nichts Gutes außer man tut es
[Diese Nachricht wurde von xilefotto am 19. Jan. 2019 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
xilefotto Mitglied Ingenieur
Beiträge: 19 Registriert: 20.06.2016 SW19, ED Pro 19
|
erstellt am: 19. Jan. 2019 10:56 <-- editieren / zitieren --> Unities abgeben:
|
xilefotto Mitglied Ingenieur
Beiträge: 19 Registriert: 20.06.2016 SW19, ED Pro 19
|
erstellt am: 19. Jan. 2019 16:15 <-- editieren / zitieren --> Unities abgeben:
Schritt für Schritt gehts weiter... Die Funktionen von Edrawings lassen sich vermutlich über EModelViewConrol per API in SW anzapfen. Die Objektbibliothek ist eingebunden. Edrawings lässt sich über SW öffnen. Bei der OpenDoc Funktion komme ich aber leider nicht weiter. Hat jmd eine Idee an was es liegen könnte? Vielen Dank für die Hilfe! Anbei mein Code: Code:
Dim swApp As Object Dim Part As Object Dim response As Long Dim Path As String Dim eModView As EModelViewControl Sub main() On Error GoTo ErrorHandler Set swApp = Application.SldWorks Set Part = swApp.ActiveDoc swApp.ActiveDoc.ActiveView.FrameState = 1 Part.EditSketch If (swApp.ActiveDoc.GetPathName = "") Then 'Abfrage ob Name vergeben wurde MsgBox ("Bitte zuerstspeichern!") Exit Sub End If Path = swApp.ActiveDoc.GetPathName 'gibt teilpfad aus If Dir(Left(swApp.ActiveDoc.GetPathName, Len(swApp.ActiveDoc.GetPathName) - 7) + "_Fertigung.htm") = "" Then Call Shell("C:\Program Files\SOLIDWORKS PDM\eDrawings\eDrawings.exe", vbNromalFocus) Call Aufmachen Else response = MsgBox(prompt:="_Fertigung.htm existiert bereits soll diese gelöscht werden: OK", buttons:=vbOKCancel) If response = vbOK Then Kill (Left(swApp.ActiveDoc.GetPathName, Len(swApp.ActiveDoc.GetPathName) - 7) + "_Fertigung.htm") Else End If End If Exit Sub ErrorHandler: ' Error-handling routine. MsgBox ("Fehler!!!") End Sub Sub Aufmachen() MsgBox (Path) eModView.OpenDoc Path, 1, 1, 1, "" End Sub
Was funktioniert: Die Übergabe des Pfads in die Untersub "Aufmachen" Das Öffnen von Edrawings über die Shellfunktion Was nicht funktioniert: OpenDoc. Ich möchte hier den Pfad des geöffneten Dokumentes in Solidworks als String an Edrawings zum Öffnen und später zum "Speichern unter" innerhalb Edrawings übergeben. ------------------ Es gibt nichts Gutes außer man tut es Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
nahe Ehrenmitglied
Beiträge: 1747 Registriert: 18.01.2001 arbeite mit: Dell Precision 7750 i7 2,6 GHz 6 Kerne 32GB RAM 512GB SSD NVIDIA Quadro RTX 4000 ------------------------ SWX-2020 SP5.0 EPDM ---------------- Windows 10 ---------------- VB.net VB VBA ein wenig Swift am Mac
|
erstellt am: 20. Jan. 2019 10:44 <-- editieren / zitieren --> Unities abgeben: Nur für xilefotto
Hallo, ich vermute mal, dass Du eher mit CreateObject Zugriff auf die eDrawings API´s bekommen wirst so ähnlich wie für SWX Set swApp = CreateObject("SldWorks.Application") mit dem Shell Befehl startest Du einfach nur eine Applikation und kannst im Normalfall, die zu öffnende Datei übergeben und Startparameter die das Programm kennt. Sonst nichts. Da gerade nicht im Büro bin, kann ich Dir leider nicht den genauen Befehl für CreateObject sagen. ------------------ Grüße Heinz Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Christian_W Ehrenmitglied V.I.P. h.c. Konstrukteur (Dipl-Ing)
Beiträge: 3189 Registriert: 04.04.2001 CSWP 12/2015<P>SWX2021sp5 Win10/11 (SWX2016, SWX2012) proAlpha6.2e00/calinkV9 (Tactonworks) (Medusa7, NesCAD2010, solidEdge19)
|
erstellt am: 21. Jan. 2019 00:23 <-- editieren / zitieren --> Unities abgeben: Nur für xilefotto
Zitat: Original erstellt von CAD-Maler: Um SolidWorks-Dateien in eDrawing zu öffnen, habe ich bisher immer die shell-Funktion genutzt ...
Hallo Jens, hast du dabei schon mal auf schreibgeschützt stellen können? beim "opendoc" kann man das wohl einstellen, aber über shell hatte ich das mal nicht geschafft .. Gruß, Christian Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
xilefotto Mitglied Ingenieur
Beiträge: 19 Registriert: 20.06.2016 SW19, ED Pro 19
|
erstellt am: 21. Jan. 2019 07:37 <-- editieren / zitieren --> Unities abgeben:
Grüß dich Heinz, vielen Dank, dass du dir Gedanken machst. Ich würde mich sehr über einen Object Code zum Ansteuern von EDrawings freuen. Set swApp = CreateObject.. habe ich zum Ansteuern von Excel aus SW genutzt. Bei Edrawings hatte ich bisser keinen Erfolg mit der Methode. ------------------ Es gibt nichts Gutes außer man tut es
[Diese Nachricht wurde von xilefotto am 21. Jan. 2019 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CAD-Maler Mitglied Konstrukteur / CAD-Admin / Mädchen für alles
Beiträge: 720 Registriert: 17.01.2007 SWX 2019 SP5 AutoCAD 2019 Win 10 pro 64 bit Intel(R) Xeon(R) CPU E5-1650 v4 @ 3.60GHz 64GB RAM Nvidia Quadro M5000 SWx EPDM
|
erstellt am: 21. Jan. 2019 08:12 <-- editieren / zitieren --> Unities abgeben: Nur für xilefotto
Was ich bisher schon erfolgreich programmiert habe: Eine Userform mit integriertem eDrawings Viewer. -> Die Steuerung wird der Werzeugsammlung mit "Weitere Steuerelemente" hinzugefügt und dann auf einer Userform platziert. Geladen wird diese Userform bei mir, wenn der Nutzer auf ein Vorschaubild im Hauptfenster klickt. Hier der Code dazu: Code:
Private Sub Image1_Click() UserForm2.EModelViewControl1.Visible = True UserForm2.EModelViewControl1.ZOrder (msosendtoback) UserForm2.EModelViewControl1.OpenDoc Dateipfad, False, False, True, "" UserForm2.EModelViewControl1.ShowToolbar True UserForm2.EModelViewControl1.Refresh UserForm2.Repaint UserForm2.Show End Sub
Rein theoretisch sollte man da auch den Save-Befehl einbauen können, getestet habe ich es noch nicht. Auch sollte das Ganze im hintergrund funktionieren, also ohne eine sichtbare Userform. Zitat: Original erstellt von xilefotto: Wie unterscheidest du Dateipfad und Dateiverzeichnis im Shell?
Dateipfad = C:\Temp\blabla.exe Dateiverzeichnis = C:\Temp Gruß, Jens ------------------ CSWE =) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
xilefotto Mitglied Ingenieur
Beiträge: 19 Registriert: 20.06.2016 SW19, ED Pro 19
|
erstellt am: 21. Jan. 2019 09:02 <-- editieren / zitieren --> Unities abgeben:
Hi Jens, das sieht super aus vielen Dank für die Nachricht. Wie hast du die Variablen deklaiert? Was bedeutet: "UserForm2.EModelViewControl1.ZOrder (msosendtoback)" Errichtest du ein Objekt als UserForm2? Wenn ja wie?
------------------ Es gibt nichts Gutes außer man tut es Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
xilefotto Mitglied Ingenieur
Beiträge: 19 Registriert: 20.06.2016 SW19, ED Pro 19
|
erstellt am: 21. Jan. 2019 11:15 <-- editieren / zitieren --> Unities abgeben:
eModView As Object Path As String Code: Private Sub Aufmachen() Set eModView = CreateObject("eDrawings.application") MsgBox (Path) eModView.EModelViewControl.Visible = True eModView.EModelViewControl.OpenDoc Path, False, False, True, "" eModView.EModelViewControl.ShowToolbar True eModView.EModelViewControl.Refresh eModView.EModelViewControl.Show End Sub
Leider kann das Progamm siehe Foto damit nichts anfangen. Die Methode ist klar aber das Objekt der Methode ist verkehrt.
------------------ Es gibt nichts Gutes außer man tut es [Diese Nachricht wurde von xilefotto am 21. Jan. 2019 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CAD-Maler Mitglied Konstrukteur / CAD-Admin / Mädchen für alles
Beiträge: 720 Registriert: 17.01.2007 SWX 2019 SP5 AutoCAD 2019 Win 10 pro 64 bit Intel(R) Xeon(R) CPU E5-1650 v4 @ 3.60GHz 64GB RAM Nvidia Quadro M5000 SWx EPDM
|
erstellt am: 21. Jan. 2019 13:00 <-- editieren / zitieren --> Unities abgeben: Nur für xilefotto
Zitat: Original erstellt von xilefotto: Wie hast du die Variablen deklaiert?
Gar nicht. Das early binding macht bei mir i.d.R. mehr Probleme, deswegen mach ich das nur, wenn es unbedingt sein muss (z.B. für einige PDM-Objekte). Zitat:
Was bedeutet:"UserForm2.EModelViewControl1.ZOrder (msosendtoback)"
Das verschiebt das Objekt in der Userform nach hinten. (Guckstu hier...) Frag mich jetzt bitte nicht, wofür ich das mache, ist schon ne Weile her und dokumentierter Code ist nur was für Angeber. Zitat:
Errichtest du ein Objekt als UserForm2? Wenn ja wie?
Ähmmmm ... Nein. Durch das Einbetten des Control-Elements IN eine Userform wird das Objekt ja automatisch erzeugt und geladen. Ich habe eine Userform erstellt, das eDrawings-Dingens als Steuerelement reingeworfen und führe die Userform dann aus/ lasse sie anzeigen. Gruß, Jens ------------------ CSWE =) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
xilefotto Mitglied Ingenieur
Beiträge: 19 Registriert: 20.06.2016 SW19, ED Pro 19
|
erstellt am: 21. Jan. 2019 14:10 <-- editieren / zitieren --> Unities abgeben:
Ach veflixt Zitat: Gar nicht. Das early binding macht bei mir i.d.R. mehr Probleme, deswegen mach ich das nur, wenn es unbedingt sein muss (z.B. für einige PDM-Objekte).
Eigentlich möchte ich das Makro direkt über einen Button in der Solidworksumgebung starten (das hat bisher immer super funktioniert). Deshalb brauche Ich vermutlich die Deklaration im Vorfeld. Hast du irgend eine Idee an was es liegen könnte, dass die Objektinitialisierung nicht richtig funktioniert? Die Bibliotheken sind eingebunden. Kann es sein, dass die App falsch bezeichnet ist siehe: Code: Set eModView = CreateObject("eDrawings.application")
------------------ Es gibt nichts Gutes außer man tut es Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CAD-Maler Mitglied Konstrukteur / CAD-Admin / Mädchen für alles
Beiträge: 720 Registriert: 17.01.2007 SWX 2019 SP5 AutoCAD 2019 Win 10 pro 64 bit Intel(R) Xeon(R) CPU E5-1650 v4 @ 3.60GHz 64GB RAM Nvidia Quadro M5000 SWx EPDM
|
erstellt am: 21. Jan. 2019 14:59 <-- editieren / zitieren --> Unities abgeben: Nur für xilefotto
Zitat: Original erstellt von xilefotto: Ach veflixt Eigentlich möchte ich das Makro direkt über einen Button in der Solidworksumgebung starten (das hat bisher immer super funktioniert). Deshalb brauche Ich vermutlich die Deklaration im Vorfeld.
Das eine hat mit dem anderen nix zu tun. Probiers doch einfach mal. Ich starte 95% meiner Makros über einen Button in SolidWorks und habe trotzdem nur das allernotwendigste vorher deklariert. Zitat:
Hast du irgend eine Idee an was es liegen könnte, dass die Objektinitialisierung nicht richtig funktioniert? Die Bibliotheken sind eingebunden. Kann es sein, dass die App falsch bezeichnet ist siehe: Code: Set eModView = CreateObject("eDrawings.application")
Ja, so langsam habe ich einen Verdacht. Es scheint sich um einen klassischen PEBCAK-Fehler zu handeln. Die Bibliothek ist nur eine Schnittstelle, um ein Addin/Plugin/Was-auch-immer von eDrawings (ein eDrawings-Fenster) in eine Visual-Basic-Userform EINZUBETTEN. Zitat:
Using the eDrawings ActiveX controlThe eDrawings API is implemented as a Microsoft ActiveX control. This topic shows how to create Microsoft Visual Basic and C# Windows Forms applications that use this control to load eDrawings drawings.
D.h. du wirst nicht drumrum kommen, dir in deinem SWX-Makro eine Userform zu erstellen und dort das Steuerelement einzubinden. Was du dann mit der Userform machst, also ob du die versteckst oder anzeigst, ist dir überlassen. Aber einmal wirst du die zur Laufzeit des Makros laden müssen. Gruß, Jens
------------------ CSWE =) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
xilefotto Mitglied Ingenieur
Beiträge: 19 Registriert: 20.06.2016 SW19, ED Pro 19
|
erstellt am: 21. Jan. 2019 17:53 <-- editieren / zitieren --> Unities abgeben:
Zitat: D.h. du wirst nicht drumrum kommen, dir in deinem SWX [SolidWorks] -Makro eine Userform zu erstellen und dort das Steuerelement einzubinden. Was du dann mit der Userform machst, also ob du die versteckst oder anzeigst, ist dir überlassen. Aber einmal wirst du die zur Laufzeit des Makros laden müssen.
Läuft Danke Jens! Jetzt muss ich nur noch das Abspeichern richten. Sobald alles steht lade ich meine Code hier rein.
------------------ Es gibt nichts Gutes außer man tut es Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
xilefotto Mitglied Ingenieur
Beiträge: 19 Registriert: 20.06.2016 SW19, ED Pro 19
|
erstellt am: 21. Jan. 2019 18:40 <-- editieren / zitieren --> Unities abgeben:
So jetzt läuft die Kiste. SW 2019 bringt die Funktion mit. Nach Einbindung des neuen Userform Steuerelements "eDrawings 2019 Control" und Umstellung der Type auf HTML5 läuf alles wie gewünscht! Anbei der Code der Main:
Code: Dim swApp As Object Dim Part As Object Dim response As Long Dim Path As StringSub main() On Error GoTo ErrorHandler Set swApp = Application.SldWorks Set Part = swApp.ActiveDoc swApp.ActiveDoc.ActiveView.FrameState = 1 Part.EditSketch If (swApp.ActiveDoc.GetPathName = "") Then 'Abfrage ob Name vergeben wurde MsgBox ("Bitte zuerstspeichern!") Exit Sub End If Path = swApp.ActiveDoc.GetPathName 'gibt teilpfad aus If Dir(Left(swApp.ActiveDoc.GetPathName, Len(swApp.ActiveDoc.GetPathName) - 7) + "_Fertigung.html") = "" Then Call Aufmachen Else response = MsgBox(prompt:="_Fertigung.htm existiert bereits soll diese gelöscht werden: OK", buttons:=vbOKCancel) If response = vbOK Then Kill (Left(swApp.ActiveDoc.GetPathName, Len(swApp.ActiveDoc.GetPathName) - 7) + "_Fertigung.html") Else End If End If Exit Sub ErrorHandler: ' Error-handling routine. MsgBox ("Fehler!!!") End Sub Sub Aufmachen() MsgBox (Path) UserForm1.Show End Sub
Dann der Transfer zur Userform Dank Jens Hilfe: Code: Dim swApp As Object Dim Path As String Private Sub EModelViewControl1_OnComponentSelectionNotify(ByVal ComponentName As String, ByVal XCoordinate As Long, ByVal YCoordinate As Long)
End Sub Private Sub UserForm_Activate() Set swApp = Application.SldWorks Set Part = swApp.ActiveDoc
Path = swApp.ActiveDoc.GetPathName UserForm1.EModelViewControl1.Visible = True UserForm1.EModelViewControl1.ZOrder (msosendtoback) UserForm1.EModelViewControl1.OpenDoc Path, False, False, True, "" UserForm1.EModelViewControl1.ShowToolbar True UserForm1.EModelViewControl1.Refresh UserForm1.EModelViewControl1.Save Left(swApp.ActiveDoc.GetPathName, Len(swApp.ActiveDoc.GetPathName) - 7) + "_Fertigung.html", HTML5, "" UserForm1.Hide End Sub
Was noch zu verbessern wäre: Globale Variable -> Userform aus der Main ------------------ Es gibt nichts Gutes außer man tut es [Diese Nachricht wurde von xilefotto am 21. Jan. 2019 editiert.] [Diese Nachricht wurde von xilefotto am 22. Jan. 2019 editiert.] [Diese Nachricht wurde von xilefotto am 22. Jan. 2019 editiert.] [Diese Nachricht wurde von xilefotto am 22. Jan. 2019 editiert.] [Diese Nachricht wurde von xilefotto am 22. Jan. 2019 editiert.] [Diese Nachricht wurde von xilefotto am 22. Jan. 2019 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
xilefotto Mitglied Ingenieur
Beiträge: 19 Registriert: 20.06.2016 SW19, ED Pro 19
|
erstellt am: 23. Jan. 2019 08:57 <-- editieren / zitieren --> Unities abgeben:
|