Ich habe ein Makro, das eine Dimension erfordert. Anschließend möchte ich meine Teilefamilie automatisch öffnen und die Werte mit dieser Bemaßung aktualisieren.
Wüssten Sie , wie Sie eine Teilefamilie öffnen und den Inhalt einer Zelle mit einem Wert ändern können?
Vielen Dank. Makro 1 eignet sich hervorragend, um zu überprüfen, ob die Komponentenfamilie vorhanden ist.
Ich habe den Code aus Makro 2 verwendet, um die Raumfamilie zu öffnen. Die Excell-Datei öffnet sich gut, die angegebenen Werte sind korrekt, aber das 3D wird nicht aktualisiert. Sie wird erneut aktualisiert, wenn ich die Teilefamilie erneut öffne.
Hier ist der Code von Makro 2, den ich angegeben habe:
In dem Codeausschnitt, den Sie geben, erhalten Sie die Tabelle des Objekts "swModel", aber Sie bitten um eine Rekonstruktion des Objekts "Part", versuchen Sie, indem Sie "swModel.ForceRebuild" anstelle von "Part.ForceRebuild" einfügen.
Für swDesTable.Detach gebe ich zu, dass ich nicht genau weiß, wofür es ist, aber in der Hilfe: Trennen Sie die Designtabelle von der Microsoft Excel-Tabelle.
Im Falle der gewünschten Verwendung halte ich das nicht für notwendig.
swDesTable.Attach hingegen wird verwendet, um die Tabelle zu aktivieren.
Debug.assert ist ein bedingter Haltepunkt, wenn ich keinen Fehler mache, wenn der boolesche Bret falsch ist, stoppt das Makro in dieser Zeile (im Grunde, wenn die Tabelle nicht geöffnet wird).
Um die Vorlage zu aktualisieren, müssen Sie swDesTable.UpdateTable 2, True verwenden .
Vielen Dank an euch beide für eure Antworten. Es funktioniert. Ich habe immer noch die excell-Anwendung (ich vermute wegen der Teilefamilie), die offen bleibt. Wäre es möglich, es zu schließen und am Ende des Makros wieder in 3D zu gelangen? Vielen Dank im Voraus für Ihr Feedback
Es muss etwas anderes im Makro vorhanden sein, das das Schließen von Excel blockiert. Ich für meinen Teil habe Excel, das aus den aktiven Prozessen verschwindet, sobald das Makro endet (aber ich habe nur einen Codeausschnitt, der die Tabelle öffnet, einen Wert aktualisiert, die Tabelle schließt und das 3D aktualisiert).
Es würde den vollständigen Code benötigen, um festzustellen, ob es eine andere Funktion gibt, die blockiert.
'----------------------------------- (') Voraussetzungen: ' 1. Öffnen Sie ein Teiledokument, das eine Konstruktionstabelle enthält. ' 2. Stellen Sie sicher, dass das Teiledokument eine Konstruktion enthält. '-Tabelle, indem Sie Tabellen im ConfigurationManager erweitern. ' 3. Öffnen Sie das Direktfenster. ' ' Postbedingungen: ' 1. Ruft ab, ob die Design-Tabelle aktualisiert werden kann, bevor ' Ausführen des Makros. ' 2. Legt fest, dass die Design-Tabelle nicht aktualisiert werden kann, wenn sie ' aktualisierbar oder umgekehrt. ' 3. Untersuchen Sie das Direktfenster. '----------------------------------- Explizite Option 'Dim swApp As SldWorks.SldWorks Dim swModel As SldWorks.ModelDoc2 Dim swDesignTable As SldWorks.DesignTable Dim boolstatus als boolescher Wert Dimmen Sie den letzten Zustand als Variante Dim swDesTable As SldWorks.DesignTable Doppelte Höhe dimmen
Legen Sie swApp = Application.SldWorks fest Festlegen von swModel = swApp.ActiveDoc Setze swDesignTable = swModel.GetDesignTable() " Änderungen an den Merkmalen der ' Design-Tabelle swDesignTable.EditFeature ' Ermitteln Sie, ob die Designtabelle aktualisierbar ist laststate = swDesignTable.Aktualisierbar Debug.Print "Design-Tabelle aktualisierbar: " & CStr(laststate) ' Wenn die Design-Tabelle aktualisierbar ist, dann setzen Sie sie " auf nicht aktualisierbar oder umgekehrt swDesignTable.Updatable = Nicht letzter Zustand ' Aktualisieren Sie dieses Merkmal der Design-Tabelle boolstatus = swDesignTable.UpdateFeature() ' Ermitteln Sie, ob die Designtabelle aktualisierbar ist laststate = swDesignTable.Aktualisierbar Debug.Print "Design-Tabelle aktualisierbar: " & CStr(laststate)
Height = InputBox("Bitte geben Sie die Förderhöhe an.... ") 'swModel.GetEquationMgr.Value("Höhe") = Höhe Set swDesTable = swModel.GetDesignTable bRet = swDesTable.Attach
'Debug.Assert bRet 'Haltepunkt, wenn die Tabelle nicht geöffnet wird, wenn bret falsch ist swDesTable.UpdateTable 2, Wahr swDesTable.Detach swModel.ForceRebuild ' zum Neuerstellen eines Part.ForceRebuild
Das Gleiche gilt für mich, Excel schließt gut und verschwindet aus der Liste der Prozesse am Ende des Makros, aber es gibt eine kleine Zeitspanne, bevor dies erledigt ist, ein Zeitrahmen, der kürzer ist, indem die letzte Zeile "Set swApp = Application.SldWorks" gelöscht wird, die nutzlos ist, da diese swApp-Variable bereits am Anfang Ihres Makros definiert ist.
Ich habe bereits bemerkt, dass der Excel-Prozess manchmal Probleme beim Schließen von Makros hat und dass wir oft in den Debug-Modus gehen, insbesondere wenn das Makro während der Ausführung einfriert...
Vielen Dank, Roger. Haben Sie mindestens einen Trick, um das aktive Solidworks-Fenster anzuzeigen, weil ich dieses verdammte Excel-Fenster habe, das übernimmt.... Ich möchte nur zumindest mein Makro vervollständigen, indem ich das Sldworks-Fenster anzeige... Vielen Dank
Auf dem Code sehe ich nichts Besonderes, ich für meinen Teil habe immer noch keine Spur von Excel am Ende des Makros.
SW wieder in den Vordergrund zu rücken, es sei denn, ich irre mich, es ist
bret = swapp.visible
Nach dem Problem selbst ist es entweder ein Absturz von Excel oder es ist ein Fehler in der Solidworks-Version.
Ist die Raumfamilie in einem anderen Fenster geöffnet oder ist sie in SW geöffnet?
Eine weitere etwas barbarische Lösung sind die Shell-Befehle, um den Excel-Prozess zu beenden:
Shell "taskkill /f /im excel.exe", vbHide
Sonst eine andere Idee, es kann von der automatischen Aktualisierung der Tabelle beim Öffnen kommen, vielleicht wartet SW im Hintergrund auf etwas (Fenster, das in den Hintergrund gewechselt wäre) und blockiert plötzlich das Schließen von Excel.
Sie sollten den Code mit der Deaktivierung der automatischen Aktualisierung der Tabelle testen, aus dem Speicher befindet er sich in einem der beiden Codes der Hilfe meiner ersten Antwort.
Hallo Thema ausgraben, Ich werde versuchen, es klar zu sagen. Dieses Makro funktioniert hervorragend, außer dass... 1- Ich ändere eine Skizze 2- Ich führe das Makro aus (was gut läuft), aber am Ende sperrt es alle Dimensionen der Skizzen, so dass es seit SW nicht mehr möglich ist, einen Wert zu ändern. 3- Ich führe das Makro erneut aus und habe dort Zugriff, um die Skizzen erneut aus dem SW zu ändern. Zusammenfassend lässt sich sagen, dass ich, wenn ich das Makro nach dem Ändern eines Sketches starte, es ein zweites Mal ausführen muss, um einen Wert erneut ändern zu können. Egal, wie viel ich herumbastle, ich finde nicht warum. wenn mich jemand aufklären kann. Möge die Macht mit euch sein.
Hallo Ich bin mir nicht sicher, ob ich das Problem richtig verstanden habe. Ich kann mich in einer Skizze befinden oder direkt mit einem Doppelklick auf die Funktion bearbeiten, aber ich habe keine Bemaßungssperre. Auf der anderen Seite, da es einen starken Umbau gibt, finden wir uns unweigerlich außerhalb der Skizze wieder.
Hallo Hier finden Sie ein Erklärvideo. Ich erkläre, was passiert. 1-Sie können sehen, dass ich einen Wert nach Belieben ändern kann. 2-Ich führe das Makro aus, um das Teil zu aktualisieren 3- Ich möchte denselben Wert erneut ändern, aber es ist unmöglich, ihn zu ändern. 4-Ich führe das Makro erneut aus und habe dort wieder Bearbeitungszugriff. Warum muss ich das Makro erneut ausführen, um Zugriff auf die Bearbeitung zu haben??? Möge die Macht mit dir sein
Hallo Ich habe es gerade verstanden. Tatsächlich müssen Sie diesen Teil des Codes entfernen, der das Aktualisierungsverhalten der Tabelle ändert.
Set swDesignTable = swModel.GetDesignTable()
' Allow changes to the characteristics of the
' design table
swDesignTable.EditFeature
' Get whether design table is updatable
laststate = swDesignTable.Updatable
Debug.Print "Design table updatable: " & CStr(laststate)
' If design table is updatable, then set it
' to not updatable or vice versa
swDesignTable.Updatable = Not laststate
' Update this characteristic of the design table
boolstatus = swDesignTable.UpdateFeature()
' Get whether design table is updatable
laststate = swDesignTable.Updatable
Debug.Print "Design table updatable: " & CStr(laststate)
Er wechselt von "Das Aktualisieren der Komponentenfamilie durch Modelländerungen zulassen" zu "Modelländerungen nicht zulassen, die die Komponentenfamilie aktualisieren würden". Beim ersten Mal wechselt es in den zweiten Modus, beim zweiten Start macht es das Gegenteil.