| |
 | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS |
| |
 | Optimieren Sie Ihre SOLIDWORKS Tasks mit Visiativ myCADtools - Jetzt Kostenlos testen >>, eine Pressemitteilung
|
Autor
|
Thema: Makro Probleme (1920 mal gelesen)
|
Joscha P. Mitglied Staatl. gepr. Techniker
 
 Beiträge: 216 Registriert: 06.05.2010 SWX 2011 SP4 EPDM 2011 SP4 Microsoft Windows 7 Professional SP1 64 Bit Intel Xeon CPU W3550 @ 3,07 GHz 3,06 GHz 12 GB RAM
|
erstellt am: 28. Jul. 2010 16:30 <-- editieren / zitieren --> Unities abgeben:         
Hallo zusammen, ich habe da ein kleines Problem mit der Erstellung eines Makros. Ich muss dazu sagen, dass ich nicht alls zu versiert bin makros zu schreiben und garde erst dabei bin mit VB in den Kopf zu kloppen. Trotz alle dem muss ich ein kleines Programm scheiben und Baugruppen mit Modulen zu versehen. Da habe ich nun ein Kleines Problem, und zwar habe ich es mir so gedacht das ich mir Listenfelder Erstellen will in den ich die Einzelnen Module auswähle, diese dann anschließen in einen BG lade und sie als Teil abspeichere. nu hängt es bei mir schon beim ersten und zweiten Listenfled. Im ersten Listen weld werden mir die gewünschen einträge alle Doppelt angezeigt, finde aber nicht den Fehler. Das zweite Listenfeld wollte ich ich über eine If- Then funktion füllen, damit keine unsinnigen Baugruppen erstellt werden koennen. aber wenn ich das Laden möchte passiert nix. Kann mir einer sagen woran das liegen könnte? zur erläuterung mein Code: Private Sub UserForm_Layout() 'Anbindung Dach lstDach.AddItem "ohne Dach", 0 lstDach.AddItem "Sandwich 30mm STW-HP", 1 lstDach.AddItem "Sandwich 30mm STW-STW", 2 lstDach.AddItem "GFK- Sprigel STW-HP", 3 End Sub Private Sub lstFront_Change() If lstDach = "ohne Dach" Then AddItem "ohne Front" AddItem "Stirnwand Sandwich 30mm" If lstDach = "Sandwich 30mm STW-HP" Then AddItem "ohne Front" AddItem " Stirnwand Sandwich 30mm" If lstDach = "Sandwich 30mm STW-STW" Then AddItem "ohne Front" AddItem "Stirnwand 30mm Sandwich" If lstDach = "GFK- Sprigel STW-HP" Then AddItem "ohne Front" AddItem "Stirnwand 30mm Sandwich" End If End Sub End Sub für eure Hilfe wäre ich echt dankbar.
könnte auch sein das im laufe der erstellung des Programms noch ein paar fragen auftauchen =) ------------------ Geduld ist die Kunst nur langsam wütend zu werden! Solid Works kann so grausam sein! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
u.clemens Mitglied Konstrukteur
  
 Beiträge: 964 Registriert: 04.07.2000 engineer's law o cheap o fast o good check only two !
|
erstellt am: 28. Jul. 2010 18:02 <-- editieren / zitieren --> Unities abgeben:          Nur für Joscha P.
Zitat: Original erstellt von Joscha P.: Hallo zusammen, ... habe ich nun ein Kleines Problem, ...
nun, nach deinem Code zu urteilen hast du nicht nur ein und nicht nur ein kleines Problem ... Ich gehe mal davon aus, dass dein hier eingestellter Code nur Schipsel von etwas Größerem ist - sonst ist es noch hoffnungsloser ... Nur mal einige Sachen, die mir auf die Schnelle auffallen ... - Offensichtlich willst du das Listenobject IsTFront in Anhängigkeit vom gewählten Wert des Listenobjects IstDach füllen - dann ist aber das auslösende Ereignis IstDach_Change nicht IstFront_Change - Statt einer Vielzahl von If-Then bietet sich hier eine Case-Anweisung an - Ich würde nicht mit "hartverdrahteten Texten" im Code arbeiten, definiere stattdessen Constanten und verwende diese - damit ist sichergestellt, dass an allen Stellen auch die gewünschten Vergleiche klappen - Tippfehler ausgeschlossen, nachträgliche Änderungen einfacher. Ich persönlich würde sowieso lieber mit dem Listindex arbeiten, aber das ist Geschmackssache ... - If lstDach = "ohne Dach" funktioniert ? IstDach ist doch ein Object - du müßtest doch den aktuellen Wert (Text oder Listindex) abfragen - AddItem ohne Object ? ------------------ mfg uc Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Joscha P. Mitglied Staatl. gepr. Techniker
 
 Beiträge: 216 Registriert: 06.05.2010 SWX 2011 SP4 EPDM 2011 SP4 Microsoft Windows 7 Professional SP1 64 Bit Intel Xeon CPU W3550 @ 3,07 GHz 3,06 GHz 12 GB RAM
|
erstellt am: 29. Jul. 2010 07:18 <-- editieren / zitieren --> Unities abgeben:         
Vielen dank für deine schnelle Hilfe! Der eingestellte Code ist nur der anfang von dem "Programm". Er soll nur die UserForm laden. Wie gesagt, mein Problem ist das ich noch nie vorher mit VB gearbeitet habe und nu versuch mir anhand eines Buches es mir selber beizubringen. Aber wieso habe ich bei mir die lstDach doppelt ausgefüllt? und hats du vielleicht ein Beispiel Code um mir zu Zeigen wie ich die lstFront in Abhängigkeit zu lstDach Füllen kann? Vielleicht kann ich mich dann daran entlang hangeln. Es ist echt sau schwer wenn man einen Vernünfitgen Code had den wo man genau weiss was da grade passiert. Das 2. Problem ist auch noch das es keinen gibt den ich Fragen kann aus unserer Firma, das erschwert das ganz noch ein bissl. =) ------------------ Geduld ist die Kunst nur langsam wütend zu werden! Solid Works kann so grausam sein! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
teletobi666 Mitglied Konstrukteur

 Beiträge: 19 Registriert: 08.02.2007
|
erstellt am: 29. Jul. 2010 08:40 <-- editieren / zitieren --> Unities abgeben:          Nur für Joscha P.
Hallo Joscha P.! Ich bin zwar auch kein Experte im Programmieren, aber ich habe mir Deinen Code mal angeschaut und daran rumgebastelt und mit Kommentaren versehen. Hoffentlich habe ich den Sinn Deines Makros richtig interpretiert! Private Sub UserForm_Layout() 'Anbindung Dach lstDach.AddItem "ohne Dach", 0 lstDach.AddItem "Sandwich 30mm STW-HP", 1 lstDach.AddItem "Sandwich 30mm STW-STW", 2 lstDach.AddItem "GFK- Sprigel STW-HP", 3 End Sub
Private Sub lstDach_Change()
lstFront.Clear 'Löschen des lstFront-Listenfelds, da sonst die neuen Werte zusätzlich in der Liste auftauchen 'Auswahl über Select Case: Select Case lstDach.ListIndex 'hier wird Select Case angewiesen, den jeweils gewählten Index des lstDach-Listenfeldes zu untersuchen Case 0 'hier wird auf den Index 0 geprüft; ähnlich dem Ablauf einer If-Then-Else-Anweisung lstFront.AddItem "ohne Front" lstFront.AddItem "Stirnwand Sandwich 30mm" Case 1 'hier wird auf den Index 1... lstFront.AddItem "ohne Front" lstFront.AddItem "Stirnwand Sandwich 30mm" Case 2 lstFront.AddItem "ohne Front" lstFront.AddItem "Stirnwand 30mm Sandwich" Case 3 lstFront.AddItem "ohne Front" lstFront.AddItem "Stirnwand 30mm Sandwich" End Select End Sub Gruß, Tobias ------------------ FSK ab 12 Jahren: Der Held bekommt das Mädchen. FSK ab 16 Jahren: Der Böse bekommt das Mädchen. FSK ab 18 Jahren: Alle bekommen das Mädchen. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Joscha P. Mitglied Staatl. gepr. Techniker
 
 Beiträge: 216 Registriert: 06.05.2010 SWX 2011 SP4 EPDM 2011 SP4 Microsoft Windows 7 Professional SP1 64 Bit Intel Xeon CPU W3550 @ 3,07 GHz 3,06 GHz 12 GB RAM
|
erstellt am: 29. Jul. 2010 09:32 <-- editieren / zitieren --> Unities abgeben:         
Ja Super, das ist genau das was ich wollte. Dann kann ich ja jetzt zumindst meine Benutzeroberfläche anpassen. Jetz habe ich noch das Problem das ich von einem Bestimt Teil in Solidworks Maße ändern weil und diese Maße möchte ich ganz gerne über txtfelder Steuern. Ich habe mir nun ein Makroaufgezeichnet in dem ich das Maß ändere. Nun muss ich ja Variablen anlegen um die Maße aus den Textfeldern in das Teil zu übernehmen würd ich das dann so machen? Wie stelle ich sowas denn an? und wenn ich das Mako nun ablaufen lasse tritt immer ein Fehler auf warum? Ich weiss ich bin furchtbar  Code des aufgezeichnetn Makros: 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.OpenDoc6("C:\Titgemeyer_PDM\Bausatzsysteme\Konfigurationsmodelle\SK-100863-Kofferbausatz Mastermodell Volumenkoerper GETO Van 3, 5t.SLDPRT", 1, 0, "", longstatus, longwarnings) swApp.ActivateDoc2 "SK-100863-Kofferbausatz Mastermodell Volumenkoerper GETO Van 3, 5t.SLDPRT", False, longstatus Set Part = swApp.ActiveDoc Set Part = swApp.ActiveDoc Dim myModelView As Object Set myModelView = Part.ActiveView myModelView.FrameLeft = 0 myModelView.FrameTop = 0 Set myModelView = Part.ActiveView myModelView.FrameState = swWindowState_e.swWindowMaximized Set myModelView = Part.ActiveView myModelView.FrameState = swWindowState_e.swWindowMaximized boolstatus = Part.Extension.SelectByID2("Skizze1", "SKETCH", 0, 0, 0, False, 0, Nothing, 0) Part.EditSketch Part.ClearSelection2 True boolstatus = Part.Extension.SelectByID2("L1@Skizze1@SK-100863-Kofferbausatz Mastermodell Volumenkoerper GETO Van 3, 5t.SLDPRT", "DIMENSION", 2.56623205195, 0.4906545882904, 0.3929980805478, False, 0, Nothing, 0) boolstatus = Part.Extension.SelectByID2("L1@Skizze1@SK-100863-Kofferbausatz Mastermodell Volumenkoerper GETO Van 3, 5t.SLDPRT", "DIMENSION", 2.56623205195, 0.4906545882904, 0.3929980805478, False, 0, Nothing, 0) Dim myDimension As Object Set myDimension = Part.Parameter("L1@Skizze1") myDimension.SystemValue = 4.6 Part.ClearSelection2 True Part.SketchManager.InsertSketch True boolstatus = Part.EditRebuild3() End Sub ab dem eingerückten Befehl hält das Makro an. Warum?
------------------ Geduld ist die Kunst nur langsam wütend zu werden! Solid Works kann so grausam sein! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
MapleLeaf Mitglied Dipl.-Ing. (FH) Maschinenbau

 Beiträge: 11 Registriert: 24.03.2010 SolidWorks 2010 SP2.1
|
erstellt am: 29. Jul. 2010 10:31 <-- editieren / zitieren --> Unities abgeben:          Nur für Joscha P.
Hallo Joscha, probiers mal damit: Set swApp = Application.SldWorks Set Part = swApp.ActiveDoc
Set Part = swApp.OpenDoc6("C:\Titgemeyer_PDM\Bausatzsysteme\Konfigurationsmodelle\SK-100863-Kofferbausatz Mastermodell Volumenkoerper GETO Van 3, 5t.SLDPRT", 1, 0, "", longstatus, longwarnings) swApp.ActivateDoc2 "SK-100863-Kofferbausatz Mastermodell Volumenkoerper GETO Van 3, 5t.SLDPRT", False, longstatus Set myDimension = Part.Parameter("L1@Skizze1@SK-100863-Kofferbausatz Mastermodell Volumenkoerper GETO Van 3, 5t.SLDPRT"") myDimension.SystemValue = 4.6 boolstatus = Part.EditRebuild3() Part.ClearSelection2 True
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Joscha P. Mitglied Staatl. gepr. Techniker
 
 Beiträge: 216 Registriert: 06.05.2010 SWX 2011 SP4 EPDM 2011 SP4 Microsoft Windows 7 Professional SP1 64 Bit Intel Xeon CPU W3550 @ 3,07 GHz 3,06 GHz 12 GB RAM
|
erstellt am: 29. Jul. 2010 11:01 <-- editieren / zitieren --> Unities abgeben:         
hmm das klappt leider nicht, er hängt an der stelle mit set myDimension = Part.Parameter ...... Habe in der Zeile auch die 2. " weg gemacht, aber klappt tortzdem nicht. Ich merk schon, das wird alles ne schwierige geburt. ------------------ Geduld ist die Kunst nur langsam wütend zu werden! Solid Works kann so grausam sein! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
MapleLeaf Mitglied Dipl.-Ing. (FH) Maschinenbau

 Beiträge: 11 Registriert: 24.03.2010 SolidWorks 2010 SP2.1
|
erstellt am: 29. Jul. 2010 11:15 <-- editieren / zitieren --> Unities abgeben:          Nur für Joscha P.
Ersetz mal die Zeile: Set myDimension = Part.Parameter("L1@Skizze1") aus Deinem Code mit: Set myDimension = Part.Parameter("L1@Skizze1@SK-100863-Kofferbausatz Mastermodell Volumenkoerper GETO Van 3, 5t.SLDPRT"") Du musst immer den ganzen Pfad von dem Maß angeben. Was Kommt denn für eine Fehlermeldung? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Joscha P. Mitglied Staatl. gepr. Techniker
 
 Beiträge: 216 Registriert: 06.05.2010 SWX 2011 SP4 EPDM 2011 SP4 Microsoft Windows 7 Professional SP1 64 Bit Intel Xeon CPU W3550 @ 3,07 GHz 3,06 GHz 12 GB RAM
|
erstellt am: 29. Jul. 2010 11:42 <-- editieren / zitieren --> Unities abgeben:         
Na klappt leider auch net. Find bissl komisch das wenn ich in sw ein Makro aufzeichne, ich diese nicht abspielen kann weil ich fehler bekomme. ------------------ Geduld ist die Kunst nur langsam wütend zu werden! Solid Works kann so grausam sein! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
nahe Ehrenmitglied
    
 Beiträge: 1764 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: 30. Jul. 2010 07:33 <-- editieren / zitieren --> Unities abgeben:          Nur für Joscha P.
Hallo ohne den Code jetzt wirklich genau zu untersuchen warum hast Du am Ende von Set myDimension = Part.Parameter("L1@Skizze1@SK-100863-Kofferbausatz Mastermodell Volumenkoerper GETO Van 3, 5t.SLDPRT"") zwei " statt einem " ?
------------------ Grüße Heinz Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Joscha P. Mitglied Staatl. gepr. Techniker
 
 Beiträge: 216 Registriert: 06.05.2010 SWX 2011 SP4 EPDM 2011 SP4 Microsoft Windows 7 Professional SP1 64 Bit Intel Xeon CPU W3550 @ 3,07 GHz 3,06 GHz 12 GB RAM
|
erstellt am: 30. Jul. 2010 07:37 <-- editieren / zitieren --> Unities abgeben:         
Moin, Ich denke das war ein Tippfehler, aber mit einem " klappts auch net. Wenn man echt keinerlei Vorkenntnisse hat, ist es echt schwer sich mit den Makros zurecht zu finden. ------------------ Geduld ist die Kunst nur langsam wütend zu werden! Solid Works kann so grausam sein! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
teletobi666 Mitglied Konstrukteur

 Beiträge: 19 Registriert: 08.02.2007
|
erstellt am: 30. Jul. 2010 08:48 <-- editieren / zitieren --> Unities abgeben:          Nur für Joscha P.
Hallo Joscha P.! Ich habe mal versucht, die Grundfunktion zum Ändern der Maße in einen kleinen Codeabschnitt nachvollziehbarer zu machen. Erstell Dir einfach mal einen Würfel. Benenne die Maße in der Skizze1 um in B1 und H1 (siehe angehängte Bilddatei). Das Maß der linearen Austragung benennst Du dann in T1 um und lässt mal das Makro drüberlaufen. Hier der Code: Dim swApp As Object Dim Part As Object Dim myDimension1 As Object Dim myDimension2 As Object Dim myDimension3 As Object Dim boolstatus As Boolean
Sub main()
Set swApp = Application.SldWorks Set Part = swApp.ActiveDoc Set myDimension1 = Part.Parameter("B1@Skizze1") ' hier werden myDimension1 die Parameter der Bemaßung "B1@Skizze1" übergeben Set myDimension2 = Part.Parameter("H1@Skizze1") Set myDimension3 = Part.Parameter("T1@Linear austragen1") myDimension1.SystemValue = 120 / 1000 ' hier wird myDimension1 (also dem Maß "B1@Skizze1") der neue Wert übergeben; "/ 1000" wegen Umrechnung von mm in m myDimension2.SystemValue = 100 / 1000 myDimension3.SystemValue = 120 / 1000 boolstatus = Part.EditRebuild3() ' damit die Änderungen sichtbar werden erfolgt hier ein Neuaufbau des Bauteils Part.ViewZoomtofit2 ' zeigt das Teil bildschirmfüllend End Sub Ich habe Dir die Funktionen wieder kommentiert, damit Du weißt, was wo geschieht.
Der Code des Makrorekorders ist immer total überladen. Deshalb such ich mir immer nur die benötigten Funktionen raus und schreibe mir meinen Code selbst. Versuchs doch mal und schreib bitte wieder, wie's gelaufen ist. Viele Grüße, Tobias ------------------ FSK ab 12 Jahren: Der Held bekommt das Mädchen. FSK ab 16 Jahren: Der Böse bekommt das Mädchen. FSK ab 18 Jahren: Alle bekommen das Mädchen. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Joscha P. Mitglied Staatl. gepr. Techniker
 
 Beiträge: 216 Registriert: 06.05.2010 SWX 2011 SP4 EPDM 2011 SP4 Microsoft Windows 7 Professional SP1 64 Bit Intel Xeon CPU W3550 @ 3,07 GHz 3,06 GHz 12 GB RAM
|
erstellt am: 30. Jul. 2010 09:01 <-- editieren / zitieren --> Unities abgeben:         
Ja sauber klappt perfekt! Ich danke dir für deine Hilfe! An solche Beispielen kann ich mich dann echt gut entlang hangeln. ------------------ Geduld ist die Kunst nur langsam wütend zu werden! Solid Works kann so grausam sein! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
nahe Ehrenmitglied
    
 Beiträge: 1764 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: 30. Jul. 2010 09:12 <-- editieren / zitieren --> Unities abgeben:          Nur für Joscha P.
|
Joscha P. Mitglied Staatl. gepr. Techniker
 
 Beiträge: 216 Registriert: 06.05.2010 SWX 2011 SP4 EPDM 2011 SP4 Microsoft Windows 7 Professional SP1 64 Bit Intel Xeon CPU W3550 @ 3,07 GHz 3,06 GHz 12 GB RAM
|
erstellt am: 30. Jul. 2010 09:16 <-- editieren / zitieren --> Unities abgeben:         
Ich kriege immer eine Fehlermendung NR. XXX dann wird der Debugger gestartet und die Zeile gelb markiert Wenn euch das weiterhilft kann ich diese das Nächste mal dazu schreibe ich dachte nur das die Fehler Nummer nicht so aussagekräftig ist. ------------------ Geduld ist die Kunst nur langsam wütend zu werden! Solid Works kann so grausam sein! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |