| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS | | | | 3DEXPERIENCE Conference 2024 | München, eine Veranstaltung am 16.10.2024
|
Autor
|
Thema: 3D Sketch Umbenennung (1350 / mal gelesen)
|
Maxi-Air Mitglied
Beiträge: 10 Registriert: 07.08.2018 SolidWorks 2016 Windows 7
|
erstellt am: 20. Sep. 2018 11:29 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, nachdem ihr mir letztes Mal so gut helfen konntet und ich jetzt seit bestimmt 2 Wochen an einem Problem hänge, frage ich dann doch nochmal nach. Ich scheitere an "Laufzeitfehler '91': Objektvariable oder With-Blockvariable nicht festgelegt". Gelb hinterlegt wird immer die Zeile, wo der Name zugewiesen wird. (In meinem Code Ausschnitt die letzte Zeile) Ich habe mich bei der Erstellung ganz an die Solidworks Hilfe gehalten und bisher auch nur den nicht benötigen Text als Kommentar gesetzt. Vllt liegt da ja auch mein Fehler.... Das sind die beiden Hilfe Artikel, aus denen ich den Code verwendet habe:
http://help.solidworks.com/2016/english/api/sldworksapi/create_3d_sketch_plane_example_vb.htm?verRedirect=1 http://help.solidworks.com/2016/english/api/sldworksapi/rename_active_sketch_example_vb.htm
Code:
' ### Custom sketch ### Dim swApp As SldWorks.SldWorks Dim swModel As SldWorks.ModelDoc2 Dim swSketch As SldWorks.Sketch Dim swFeat As SldWorks.Feature Dim status As Boolean Dim swModelDocExt As SldWorks.ModelDocExtension Dim swSketchManager As SldWorks.SketchManager Dim swSketchSegment As SldWorks.SketchSegment file = txtDesiredFileName.Text If Not FileExists(file) Then MsgBox (msgtext(0) & file) Exit Sub End If ' check if points need to be connected If InStr(file, "CON") > 0 Then lineFlag = 1 End If ' ### open new sketch and name it properly ### Set swApp = Application.SldWorks Set swModel = swApp.ActiveDoc 'Insert 3D sketch Set swSketchManager = swModel.SketchManager swSketchManager.Insert3DSketch True 'Set swSketchSegment = swSketchManager.CreateCenterLine(-0.082642, 0.005659, 0#, -0.049926, 0.045073, 0#) Set swSketch = swSketchManager.ActiveSketch 'status = swSketch.SetWorkingPlaneOrientation(0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0) 'Set swSketchSegment = swSketchManager.CreateCenterLine(-0.049926, 0.045073, 0#, -0.049926, -0.022634, -0.065874) 'Set swSketch = swSketchManager.ActiveSketch 'status = swSketch.SetWorkingPlaneOrientation(0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0) swModel.ClearSelection2 True swSketchManager.InsertSketch True 'Rename 3D Sketch Set swApp = Application.SldWorks Set swModel = swApp.ActiveDoc ' Get the open sketch Set swSketch = swModel.GetActiveSketch2 Set swFeat = swSketch ' Change the name of the open sketch to CircleSketch swFeat.Name = "testTEST"
Vielen Dank. Grüße, Max
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Spirou85 Mitglied Konstruktuer und CAD-Betreuer
Beiträge: 70 Registriert: 01.12.2014 HP ZBook 15 G5 Intel Xeon 2,9 GHz - 32GB Ram NVIDIA Quadro P2000M Windows 10 Pro 64Bit Version 1809 Build 17763.1098 SWX2020-64Bit-SP1.0 MaxxDB 2020 SP0.06 DraftSight Enterprise 2019 x64 SP3 3DCONNEXION SpaceMouse Enterprise mit CadMouse
|
erstellt am: 20. Sep. 2018 13:08 <-- editieren / zitieren --> Unities abgeben: Nur für Maxi-Air
Hallo Max, habe es nicht ausprobiert, aber durch das "swSketchManager.InsertSketch True" vor dem Rename-Teil wird die Skizze geschlossen, und ist so wohl nicht mehr aktiv. Deshalb wird dem swFeat "Nothing" zugewiesen und somit kann kein Zugriff auf den Namen erfolgen. Ändere den Code mal folgendermaßen und probier es: Code:
' ### Custom sketch ### Dim swApp As SldWorks.SldWorks Dim swModel As SldWorks.ModelDoc2 Dim swSketch As SldWorks.Sketch Dim swFeat As SldWorks.Feature Dim status As Boolean Dim swModelDocExt As SldWorks.ModelDocExtension Dim swSketchManager As SldWorks.SketchManager Dim swSketchSegment As SldWorks.SketchSegment file = txtDesiredFileName.Text If Not FileExists(file) Then MsgBox (msgtext(0) & file) Exit Sub End If ' check if points need to be connected If InStr(file, "CON") > 0 Then lineFlag = 1 End If ' ### open new sketch and name it properly ### Set swApp = Application.SldWorks Set swModel = swApp.ActiveDoc 'Insert 3D sketch Set swSketchManager = swModel.SketchManager swSketchManager.Insert3DSketch True 'Set swSketchSegment = swSketchManager.CreateCenterLine(-0.082642, 0.005659, 0#, -0.049926, 0.045073, 0#) Set swSketch = swSketchManager.ActiveSketch 'status = swSketch.SetWorkingPlaneOrientation(0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0) 'Set swSketchSegment = swSketchManager.CreateCenterLine(-0.049926, 0.045073, 0#, -0.049926, -0.022634, -0.065874) 'Set swSketch = swSketchManager.ActiveSketch 'status = swSketch.SetWorkingPlaneOrientation(0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0) swModel.ClearSelection2 True Set swFeat = swSketch ' Change the name of the open sketch to CircleSketch swFeat.Name = "testTEST" swSketchManager.InsertSketch True
Vielen Dank.
------------------ Viele Grüße aus Brackenheim Lars Pauly Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Maxi-Air Mitglied
Beiträge: 10 Registriert: 07.08.2018 SolidWorks 2016 Windows 7
|
erstellt am: 20. Sep. 2018 14:10 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von Spirou85: Hallo Max,habe es nicht ausprobiert, aber durch das "swSketchManager.InsertSketch True" vor dem Rename-Teil wird die Skizze geschlossen, und ist so wohl nicht mehr aktiv. Deshalb wird dem swFeat "Nothing" zugewiesen und somit kann kein Zugriff auf den Namen erfolgen. Ändere den Code mal folgendermaßen und probier es: .... Vielen Dank.
Hallo Lars, vielen Dank für deine Antwort. Jetzt erstellt er beim ersten Durchlaufen des Makros eine Skizze, benennt die aber nicht um und beim zweiten Durchlaufen generiert er wieder den Fehler, wie vorher auch. Grüße, Max
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Maxi-Air Mitglied
Beiträge: 10 Registriert: 07.08.2018 SolidWorks 2016 Windows 7
|
erstellt am: 20. Sep. 2018 14:58 <-- editieren / zitieren --> Unities abgeben:
Noch eine Ergänzung dazu Ich habe weiter experimentiert, und der Fehler taucht nur auf, wenn ich die Skizze nicht einzeln vorher schließe. Ich versuche mal, die Skizze zu schließen. Außerdem nennt er erst beim zweiten Durchlauf die Skizze um, und zwar die Vorherige. Er benennt die vorherige Skizze mit dem namen der aktuellen Skizze.... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Spirou85 Mitglied Konstruktuer und CAD-Betreuer
Beiträge: 70 Registriert: 01.12.2014 HP ZBook 15 G5 Intel Xeon 2,9 GHz - 32GB Ram NVIDIA Quadro P2000M Windows 10 Pro 64Bit Version 1809 Build 17763.1098 SWX2020-64Bit-SP1.0 MaxxDB 2020 SP0.06 DraftSight Enterprise 2019 x64 SP3 3DCONNEXION SpaceMouse Enterprise mit CadMouse
|
erstellt am: 20. Sep. 2018 15:30 <-- editieren / zitieren --> Unities abgeben: Nur für Maxi-Air
Hallo Max, nun habe ich Deinen ursprünglichen Code in ein neues Makro eingefügt, die ersten Zeilen auskommentiert. Es läuft durch ohne Fehlermeldung, aber auch ohne eine Skizze zu erstellen, was natürlich klar ist, da eine leere Skizze nach dem beenden des Skizziermodus gelöscht wird. Was für eine SWX-Version verwendest Du (bitte Systeminfo ausfüllen, erspart einige Nachfragen)?
------------------ Viele Grüße aus Brackenheim Lars Pauly Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Spirou85 Mitglied Konstruktuer und CAD-Betreuer
Beiträge: 70 Registriert: 01.12.2014 HP ZBook 15 G5 Intel Xeon 2,9 GHz - 32GB Ram NVIDIA Quadro P2000M Windows 10 Pro 64Bit Version 1809 Build 17763.1098 SWX2020-64Bit-SP1.0 MaxxDB 2020 SP0.06 DraftSight Enterprise 2019 x64 SP3 3DCONNEXION SpaceMouse Enterprise mit CadMouse
|
erstellt am: 20. Sep. 2018 15:43 <-- editieren / zitieren --> Unities abgeben: Nur für Maxi-Air
Hallo Max, da die API-Hilfe für SWX2016 ist wirst Du diese Version verwenden. Ich habe Version 2017, aber von den Befehlen her dürfte da kein Unterschied sein. Wenn ich die Linienerzeugung in dem Ursprungscode wieder zulasse (Auskommentieren entfernt) dann wird die Skizze erstellt und erhält auch den neuen Namen. Allerdings müssen ein paar unnötige SET-Anweisungen entfernt werden. Durch die wird das Feature nicht der Skizze zugeordnet. Mit den Set-Anweisungen erhalte ich auch den Fehler. Der Code sieht so aus: Code:
Sub main() ' ### Custom sketch ### Dim swApp As SldWorks.SldWorks Dim swModel As SldWorks.ModelDoc2 Dim swSketch As SldWorks.Sketch Dim swFeat As SldWorks.Feature Dim status As Boolean Dim swModelDocExt As SldWorks.ModelDocExtension Dim swSketchManager As SldWorks.SketchManager Dim swSketchSegment As SldWorks.SketchSegment ' file = txtDesiredFileName.Text ' If Not FileExists(file) Then ' MsgBox (msgtext(0) & file) ' Exit Sub ' End If ' ' ' check if points need to be connected ' If InStr(file, "CON") > 0 Then ' lineFlag = 1 ' End If ' ### open new sketch and name it properly ### Set swApp = Application.SldWorks Set swModel = swApp.ActiveDoc 'Insert 3D sketch Set swSketchManager = swModel.SketchManager swSketchManager.Insert3DSketch True Set swSketchSegment = swSketchManager.CreateCenterLine(-0.082642, 0.005659, 0#, -0.049926, 0.045073, 0#) Set swSketch = swSketchManager.ActiveSketch status = swSketch.SetWorkingPlaneOrientation(0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0) Set swSketchSegment = swSketchManager.CreateCenterLine(-0.049926, 0.045073, 0#, -0.049926, -0.022634, -0.065874) 'Set swSketch = swSketchManager.ActiveSketch 'status = swSketch.SetWorkingPlaneOrientation(0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0) swModel.ClearSelection2 True swSketchManager.InsertSketch True 'Rename 3D Sketch Set swFeat = swSketch ' Change the name of the open sketch to CircleSketch swFeat.Name = "testTEST" End Sub
Wenn es so nicht klappt, dann muss es an dem Drumherum liegen, ich nehme an, dass dieser Codeschnipsel in was größerem eingebettet ist. ------------------ Viele Grüße aus Brackenheim Lars Pauly Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Maxi-Air Mitglied
Beiträge: 10 Registriert: 07.08.2018 SolidWorks 2016 Windows 7
|
erstellt am: 20. Sep. 2018 15:46 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von Spirou85: Hallo Max,nun habe ich Deinen ursprünglichen Code in ein neues Makro eingefügt, die ersten Zeilen auskommentiert. Es läuft durch ohne Fehlermeldung, aber auch ohne eine Skizze zu erstellen, was natürlich klar ist, da eine leere Skizze nach dem beenden des Skizziermodus gelöscht wird. Was für eine SWX-Version verwendest Du (bitte Systeminfo ausfüllen, erspart einige Nachfragen)?
Hallo Lars, ich nutze die SolidWorks Version 2016. Wie in meiner Anmerkung beschrieben, habe ich festgestellt, dass es nicht die neu erstellte, sondern die vorherige Skizze umbenennt und den Fehler schmeißt es auch erst beim zweiten Durchlauf, wenn man die erste Skizze vorher nicht händisch geschlossen hat, was natürlich auch erst geht, wenn was drin ist. In meinem Fall nimmt das Makro txt dateien mit Koordinaten und fügt sie ein oder verbindet sie. Ich probier ja auch momentan selbst noch dran rum, ob ich das mit den neuen Infos (danke nochmal), vllt hinbekomme. Vielen Dank, Grüße, Max Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Maxi-Air Mitglied
Beiträge: 10 Registriert: 07.08.2018 SolidWorks 2016 Windows 7
|
erstellt am: 20. Sep. 2018 15:58 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von Spirou85: Hallo Max,da die API-Hilfe für SWX2016 ist wirst Du diese Version verwenden. Ich habe Version 2017, aber von den Befehlen her dürfte da kein Unterschied sein. Wenn ich die Linienerzeugung in dem Ursprungscode wieder zulasse (Auskommentieren entfernt) dann wird die Skizze erstellt und erhält auch den neuen Namen. Allerdings müssen ein paar unnötige SET-Anweisungen entfernt werden. Durch die wird das Feature nicht der Skizze zugeordnet. Mit den Set-Anweisungen erhalte ich auch den Fehler. Der Code sieht so aus: ....
Wenn es so nicht klappt, dann muss es an dem Drumherum liegen, ich nehme an, dass dieser Codeschnipsel in was größerem eingebettet ist.
Richtig, das Makro hab ich mir aus einem von Stefan Berlitz gebaut. Es kann Koordinaten einlesen, jetzt auch unterscheiden, ob die Punkte verbunden werden sollen oder nicht. (Soweit hab ich das hinbekommen) und nun hätte ich halt gerne, dass es die Skizze auch noch so benennt, wie die Datei heißt, aus der die Koordinaten kommen.
Danach versuche ich noch, das hinzubekommen, dass es mehrere Dateien nacheinander abarbeitet, aber soweit bin ich noch nicht.
Ich habe jetzt mal versucht das Makro anzuhängen, hoffe das hat jetzt funktioniert. Grüße und nochmals vielen Dank
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Spirou85 Mitglied Konstruktuer und CAD-Betreuer
Beiträge: 70 Registriert: 01.12.2014 HP ZBook 15 G5 Intel Xeon 2,9 GHz - 32GB Ram NVIDIA Quadro P2000M Windows 10 Pro 64Bit Version 1809 Build 17763.1098 SWX2020-64Bit-SP1.0 MaxxDB 2020 SP0.06 DraftSight Enterprise 2019 x64 SP3 3DCONNEXION SpaceMouse Enterprise mit CadMouse
|
erstellt am: 20. Sep. 2018 16:28 <-- editieren / zitieren --> Unities abgeben: Nur für Maxi-Air
Hallo Max, anbei das Makro zurück, ich habe was geändert, kann es mangels fehlender Dateien aber nicht probieren. Versuch mal ob es funktioniert. Im Code habe ich erklärende Kommentare eingetragen. ------------------ Viele Grüße aus Brackenheim Lars Pauly Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Maxi-Air Mitglied
Beiträge: 10 Registriert: 07.08.2018 SolidWorks 2016 Windows 7
|
erstellt am: 20. Sep. 2018 17:10 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von Spirou85: Hallo Max,anbei das Makro zurück, ich habe was geändert, kann es mangels fehlender Dateien aber nicht probieren. Versuch mal ob es funktioniert. Im Code habe ich erklärende Kommentare eingetragen.
Vielen Dank für die großen Mühen! Ich hab es ausprobiert, und erstmal aufgrund der Fehlermeldung "Fehler beim Kompilieren: Bibliothek nicht gefunden" einen kleinen Schock bekommen. Unter Extras -> Verweise im VBA Editor fanden sich dann Bibliotheken der 2017er Version, ich hab dann einfach deaktiviert und die 2016er aktiviert. Jetzt läuft es soweit, und benennt die richtige Skizze um. Also schonmal einen riesen Dank! Schließen tut es die Skizze immer noch nicht, vor dem zweiten Ausführen muss ich sie dann händisch schließen, sonst schmeißt es den Fehler. Wenn du möchtest, kann ich mal ein paar Beispieldateien zur Verfügung stellen (siehe Anhang) (Zur Erklärung der Datei Namen - NOC dateien sind teils einzelne, teils mehrere Punkte, die nicht verbunden werden sollen, CON, sollen verbunden werden) Vielen Dank, Grüße, Max
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|