| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS | | | | Nahe an industriellen Realbedingungen |
Autor
|
Thema: Macro opendoc-Befehl einzelne Warnungen auslesen (1334 mal gelesen)
|
Thunja Mitglied Projektleiterin / techn. Redakteurin
Beiträge: 41 Registriert: 22.08.2017 SW 2017 / Excel 2010
|
erstellt am: 29. Aug. 2017 08:06 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, da ich im I-Net nicht wirklich etwas gefunden habe, versuch ich es mal wieder hier. Ich habe den nachfolgenden Codeschnipsel: For i = 3 To 11 If objSource.cells(38, i) <> "" Then Dim msg As String '########################################## Select Case objSource.cells(36, i) Case Is = "Mantel" Name3 = "X:\Technikerarbeit\3D_Teile\M" & (l) & "_Mantel.SLDPRT" Set Part3 = swApp.OpenDoc6(Name3, swDocPART, swOpenDocOptions_Silent, "", Errors, Warnings) Debug.Print Warnings For j = 1 To 25 If objSource.cells(38, i) = xl.worksheets("Muffen").cells(j, 1) Then Zeile = j Exit For End If Next j Set objSource = xl.worksheets("Muffen") 'Bearbeitung Muffe Set myD3 = Part3.Parameter("D1@Skizze1") 'Höhe der Muffe myD3.SystemValue = objSource.cells(Zeile, 4) / 1000 swApp.SendMsgToUser (objSource.cells(Zeile, 4)) Set myD3 = Part3.Parameter("IDurchmesser@Skizze1") myD3.SystemValue = objSource.cells(Zeile, 6) / 1000 Set myD3 = Part3.Parameter("ADurchmesser@Skizze1") myD3.SystemValue = objSource.cells(Zeile, 2) / 1000 Set myD3 = Part3.Parameter("Fasendurchmesser@Skizze1") myD3.SystemValue = objSource.cells(Zeile, 7) / 1000 Set myD3 = Part3.Parameter("Fasenhöhe@Skizze1") myD3.SystemValue = objSource.cells(Zeile, 8) / 1000 swApp.CloseDoc Name3 Case Is = "Boden oben" msg = "Die Muffe M" & l & " sitzt im oberen Boden" swApp.SendMsgToUser (msg) Case Is = "Boden unten" msg = "Die Muffe M" & l & " sitzt im unteren Boden" swApp.SendMsgToUser (msg) End Select l = l + 1 Else swApp.SendMsgToUser ("Dies ist Fall 2!") Exit For End If i = i + 1 Next i die Messageboxen schmeiß ich später wieder raus, weshalb auch die Variablendeklaration hier einfach mit drin ist.
Im Prinzip soll hier eine Einzelteilzeichnung geöffnet werden, welche dann maßlich geändert wird. Im Anschluss sucht er nach der nächsten in meiner Excel-Tabelle und ändert auch diese entsprechend. Im Anschluss an diesen Codeschnipsel wird der Zusammenbau neuaufgebaut und gespeichert. Also es geht um den OpenDoc-Befehl in Zeile 7. Kann ich mir irgendwie die einzelnen Warnings ausgeben lassen? Ist es überhaupt schlimm, wenn er Warnings ausgibt? Eigentlich sollte er dies ja nicht tun. Die Gesamtanzahl der Warnings auszugeben war kein Problem und lautet 128, aber ich weiß einfach nicht, was ich damit anfangen soll... Vielen Dank für eure Antworten im Voraus. Gruß, Kristina Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bk.sc Ehrenmitglied V.I.P. h.c. Konstrukteur Sondermaschinenbau
Beiträge: 2776 Registriert: 18.07.2012 -Solid Works 2019 SP5 -Pro Engineer WF 3
|
erstellt am: 29. Aug. 2017 08:44 <-- editieren / zitieren --> Unities abgeben: Nur für Thunja
Hallo Kristina, Zitat: Die Gesamtanzahl der Warnings auszugeben war kein Problem und lautet 128, aber ich weiß einfach nicht, was ich damit anfangen soll...
Der Rückgabewert 128 ist nicht die Anzahl der Fehler sondern der Fehlercode und 128 = swFileLoadWarning_AlreadyOpen. Was die verschiedenen Rückgabewerte bedeuten findest du in der API-Hilfe unter "swFileLoadWarning_e Enumeration". Gruß Bernd ------------------ --- Man muß nicht alles wissen, man muß nur wissen wo es steht --- Staatlich anerkannte Deutschniete Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Thunja Mitglied Projektleiterin / techn. Redakteurin
Beiträge: 41 Registriert: 22.08.2017 SW 2017 / Excel 2010
|
erstellt am: 29. Aug. 2017 08:51 <-- editieren / zitieren --> Unities abgeben:
|
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: 29. Aug. 2017 09:53 <-- editieren / zitieren --> Unities abgeben: Nur für Thunja
Zitat: Original erstellt von Thunja: ... Name3 = "X:\Technikerarbeit\3D_Teile\M" & (l) & "_Mantel.SLDPRT" Set Part3 = swApp.OpenDoc6(Name3, swDocPART, swOpenDocOptions_Silent, "", Errors, Warnings) ...Im Prinzip soll hier eine Einzelteilzeichnung geöffnet werden, welche dann maßlich geändert wird. Im Anschluss sucht er nach der nächsten in meiner Excel-Tabelle und ändert auch diese entsprechend. Im Anschluss an diesen Codeschnipsel wird der Zusammenbau neuaufgebaut und gespeichert....
Hallo Kristina, Öffnest du vorher eine Zeichnung auf der die Teiledatei dargestellt wird? dann ist die im Hintergrund schon geöffnet in SolidWorks. Deshalb auch die Warnung. Das gleiche, wenn du die Baugruppe offen hast, in der die Teile drin sind (du schreibst, dass der Zusammenbau am Ende neu aufgebaut wird ...) Gruß, Christian
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Thunja Mitglied Projektleiterin / techn. Redakteurin
Beiträge: 41 Registriert: 22.08.2017 SW 2017 / Excel 2010
|
erstellt am: 30. Aug. 2017 07:19 <-- editieren / zitieren --> Unities abgeben:
Hallo Christian, nein, ich öffne zuvor nur die Baugruppe, in der das Teil miteingebunden ist. Dann öffne ich das Teil und änder dieses. Zum Schluss, wenn alle Teile geändert wurden, baut sich die Baugruppe per ForcedRebuild neu auf und wird dann gespeichert. Wenn ich die Änderungen durchführe ohne das Teil zu öffnen, dann macht er diese nicht... Ich glaube, die Fehlermeldung bekam ich, weil ich das Makro zwischen durch per debuggen durchgegangen bin und es mittendrin unterbrochen habe. Also bevor die Part-Zeichnung wieder geschlossen wurde. Mache ich alles zu und öffne SolidWorks wieder, dann bringt er den Fehler nicht. Lieben Gruß, Kristina [Diese Nachricht wurde von Thunja am 30. Aug. 2017 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: 30. Aug. 2017 08:00 <-- editieren / zitieren --> Unities abgeben: Nur für Thunja
|
Thunja Mitglied Projektleiterin / techn. Redakteurin
Beiträge: 41 Registriert: 22.08.2017 SW 2017 / Excel 2010
|
erstellt am: 30. Aug. 2017 09:07 <-- editieren / zitieren --> Unities abgeben:
Hallo Jens, auf deinen Tipp komme ich morgen oder übermorgen gerne zurück. Ich muss morgen aber erst meinen momentanen Stand vorstellen und werde deshalb zunächst an Stellen arbeiten, welche noch nicht funktionieren. In diesem Fall ist es die Maßänderung der Positionierung eines Bauteils in einer Baugruppe. Dafür muss ich aber zunächst einmal abfragen, ob das Bauteil in der Baugruppe noch existiert. Ich dachte, das würde über traverse gehen, aber die Funktion verstehe ich noch nicht so ganz... Ich habe mir die Beispiele in der API-Hilfe angesehen und auch Thomas5's Code gelesen, aber auch da fehlt mir etwas das Verständnis, warum das Makro im Debug-Modus so komisch springt. Vielleicht sollte ich etwas ausschweifender werden: Ich schreibe zur Zeit meine Technikerarbeit in einem Betrieb, welcher Behälter herstellt. Ich habe ein Makro in Excel geschrieben, um Festigkeitsberechnungen und Anderes berechnen zu lassen. Nun ist die weitere Aufgabe, den Behälter auch in SolidWorks entstehen zu lassen. Da es nicht funktioniert hat, einen per Makro eingefügten Stutzen auch per Makro zu positionieren, habe ich mich anschließend dazu entschieden, die eventuell benötigten Bauteile bereits mit fester Bemaßung einzufügen und diese dann nur zu ändern bzw. nicht benötigte Stutzen einfach rauszuschmeißen. Dadurch, dass ich aber die Stutzen rausschmeiße, muss ich nun bei der Neupositionierung der Maße wissen, welcher Stutzen denn noch existiert. So lässt sich das Ganze dann eventuell in eine For-Schleife bauen. Ich hoffe, das war jetzt nicht zu viel Text... Ich bringe bereits ganz gute Kenntnisse in VBA auf Basis von Excel mit, komme aber ins Schleudern mit den Befehlsbegriffen von SW. Und da liegt eigentlich mein Hauptproblem. Vielen Dank für eure Hilfe, Kristina
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bk.sc Ehrenmitglied V.I.P. h.c. Konstrukteur Sondermaschinenbau
Beiträge: 2776 Registriert: 18.07.2012 -Solid Works 2019 SP5 -Pro Engineer WF 3
|
erstellt am: 30. Aug. 2017 10:38 <-- editieren / zitieren --> Unities abgeben: Nur für Thunja
Hallo Kristina, möchtest du quasi einen Konfigurator selber programmieren? Hast du dir vorher auch Mal bereits vorhanden Tools angeschaut? Hier wären das Macro "MacroSheet" (von DPS) oder das in SolidWorks verfügbare DriveWorks Express vielleicht eine Alternative gewesen. Zitat: komme aber ins Schleudern mit den Befehlsbegriffen von SW. Und da liegt eigentlich mein Hauptproblem.
Hier hilft mir oft SWX auf Englisch umzustellen um an die Namen der Befehle zu kommen (Um eine Grundlage zum Suchen in der API Hilfe zu haben) oder einfach kleine Schnippsel mit dem Macrorecorder aufzunehmen. Gruß Bernd ------------------ --- Man muß nicht alles wissen, man muß nur wissen wo es steht --- Staatlich anerkannte Deutschniete 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: 30. Aug. 2017 11:17 <-- editieren / zitieren --> Unities abgeben: Nur für Thunja
Hallo Kristina, die traverse-Funktion benötigst du eigentlich nur, wenn du die Baugruppe inklusive aller evtl. vorhandenen Unterbaugruppen durchgehen willst. Für deinen Fall sollte schon der Befehl Code:
Dim swAssy As SldWorks.AssemblyDoc Dim swComponents As VariantswComponents = swAssy.GetComponents(True)
reichen. Dieser liefert dir ein Array aller in der Baugruppe vorhandenen Komponenten. Mit denen kann man dann allen möglichen und unmöglichen Kram anstellen (z.B.): Code:
Dim swComp As SldWorks.Component2 Dim swDoc2 As SldWorks.ModelDoc2For i = 0 To UBound(swComponents) Set swComp = swComponents(i) DateiName=swComp.Name2 DateiPfad=swComp.GetPathName 'Das dazugehörige Modell öffnen Set swDoc2 = swComp.GetModelDoc2 swApp.ActivateDoc2 swDoc2.GetPathName, True, Errors Next i
Gruß, Jens ------------------ CSWA, CSWP, CSWPA-SM & -SU =) [Diese Nachricht wurde von CAD-Maler am 30. Aug. 2017 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Thunja Mitglied Projektleiterin / techn. Redakteurin
Beiträge: 41 Registriert: 22.08.2017 SW 2017 / Excel 2010
|
erstellt am: 31. Aug. 2017 11:57 <-- editieren / zitieren --> Unities abgeben:
Hallo Jens, vielen Dank für deine Hilfe. Ich habe es inzwischen so Ähnlich geschrieben, bin aber über getFeature gegangen. Ich denke aber, dass ich es noch auf GetComponents abändern werde. Weniger Durchläufe der Schleifen. Gruß, Kristina Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|