Ja, swapp wird als SldWorks.sldworks deklariert.
Ich trockne, könnten Sie den gesamten Code einfügen, indem Sie ihn einfügen, mit der Option, Code aus dem Forum einzufügen, damit ich ihn wieder sehen kann.
Andernfalls checken Sie zumindest die Referenzen (Extras> Referenzen) ein, wenn die folgenden Referenzen aktiviert sind:
Solidworks 201X Erweiterbarkeits-Typenbibliothek
Sldworks 201X-Typbibliothek
Solidworks 201X Bibliothek mit konstanten Typen
Solidworks 201X Typbibliothek für Befehle
Ich für meinen Teil bin auf 2016 und keine Probleme.
Entschuldigung, hier ist der ursprüngliche Code:
Dim swApp als SldWorks.SldWorks
Dimmen des Teils als SldWorks.ModelDoc2
Dim boolstatus als boolescher Wert
SkSegment als Objekt dimmen
MyDisplayAls Objekt dimmen
MyDimension als Objekt dimmen
Sub main()
Legen Sie swApp = Application.SldWorks fest
Set Part = swApp.ActiveDoc
Part.SketchManager.InsertSketch True
boolstatus = Part.Extension.SelectByID2("Flächenplan", "PLANE", -6.71223122593068E-02, 0.049524099883856, 0, Falsch, 0, Nichts, 0)
Set skSegment = Part.SketchManager.CreateLine(0#, 0#, 0#, 0.052237, 0#, 0#)
Part.ClearSelection2 Wahr
boolstatus = Part.Extension.SelectByID2("Zeile1", "SKETCHSEGMENT", 3.01706029555596E-02, 3.7613240418119E-04, 0, Falsch, 0, Nichts, 0)
Set myDisplayDim = Part.AddDimension2(2.91675832110764E-02, -1.54214285714286E-02, 0)
Part.ClearSelection2 Wahr
Set myDimension = Part.Parameter("D1@Esquisse1")
myDimension.SystemValue = 0,05
Part.ClearSelection2 Wahr
Part.SketchManager.InsertSketch True
Ende Sub
Es ist in SolidWorks 2016 verfügbar
Hier sind die Referenzen:

Hier ist der zweite bearbeitete Code:
Dim swApp als SldWorks.SldWorks
Dimmen des Teils als SldWorks.ModelDoc2
Dim boolstatus als boolescher Wert
SkSegment als Objekt dimmen
MyDisplayAls Objekt dimmen
MyDimension als Objekt dimmen
Sub main()
Legen Sie swApp = Application.SldWorks fest
Set Part = swApp.ActiveDoc
boolstatus = swApp.SetUserPreferenceToggle(swInputDimValOnCreate, Falsch)
Part.SketchManager.InsertSketch True
boolstatus = Part.Extension.SelectByID2("Flächenplan", "PLANE", -6.71223122593068E-02, 0.049524099883856, 0, Falsch, 0, Nichts, 0)
Set skSegment = Part.SketchManager.CreateLine(0#, 0#, 0#, 0.052237, 0#, 0#)
boolstatus = Part.Extension.SelectByID2("Zeile1", "SKETCHSEGMENT", 3.01706029555596E-02, 3.7613240418119E-04, 0, Falsch, 0, Nichts, 0)
Set myDisplayDim = Part.AddDimension2(2.91675832110764E-02, -1.54214285714286E-02, 0)
Set myDimension = Part.Parameter("D1@Esquisse1")
myDimension.SystemValue = 0,05
Part.SketchManager.InsertSketch True
boolstatus = swApp.SetUserPreferenceToggle(swInputDimValOnCreate, True)
Ende Sub
Hallo
Ersetzen Sie "Dim swApp As SldWorks.SldWorks" durch "Dim swApp As Object", dies sollte funktionieren.
Herzliche Grüße
Und seien Sie auch vorsichtig, wenn Sie die SW-Parameter berühren, ist es vorzuziehen, den Wert des Parameters zu lesen und, wenn Sie ihn für eine Behandlung ändern müssen, ihn am Ende der Behandlung in seinen ursprünglichen Zustand zurückzuversetzen:
Dim value As Boolean
value = swApp.GetUserPreferenceToggle(swUserPreferenceToggle_e.swInputDimValOnCreate)
If value = True Then
boolstatus = swApp.SetUserPreferenceToggle(swUserPreferenceToggle_e.swInputDimValOnCreate, False)
End If
###### Là tu mets ton traitement #######
boolstatus = swApp.SetUserPreferenceToggle(swUserPreferenceToggle_e.swInputDimValOnCreate, value)
Herzliche Grüße
In der Tat, d.roger, ich habe es nicht spezifiziert, da sein sw so eingestellt war, dass er in die Quoten einging.
In jedem Fall funktioniert ein Setzen auf False und dann True auch dann, wenn die Option bereits aktiviert oder deaktiviert ist (ich habe es bewusst vereinfacht).
Für die swApp als Objekt habe ich es mit beiden (sldworks.sldworks und object) auf 2016 versucht, es funktioniert bei mir. Der Vorteil der zweiten besteht darin, eine Autovervollständigung bei der Eingabe des Codes zu haben und einen Überblick darüber zu haben, was von jedem Funktionsaufruf erwartet wird, ohne die Hilfe ständig offen halten zu müssen ;)
Bearbeiten: Endlich funktioniert es mit Object, mit SldWorks.SldWorks generiert es einen Kompilierungsfehler, ich glaube, gestern hatte es den Objekttyp im Speicher behalten.
Es gibt keine Möglichkeit, den Dimensionseintrag nicht zu machen, nur durch ein Argument der Funktion, anstatt die allgemeinen Parameter rückgängig zu machen und dann wieder einzusetzen...??
Hinweis: Wenn die Datei bereits eine Skizze enthält, ist die vom Makro erstellte Skizze nicht "sketch1", sondern mit einer anderen Nummer... (??)
@ Olivier42 : Hallo, es ist nicht möglich, ein Argument zu verwenden, da es sich um einen allgemeinen Parameter handelt. Meines Wissens gibt es in den APIs nichts, was es Ihnen ermöglicht, diese Parameter über ein Argument zu überschreiben.
Dies wird durch die SW-API-Hilfe bestätigt: Bevor Sie diese Methode aufrufen , sollten Sie ISldWorks::SetUserPreferenceToggle mit swUserPreferenceToggle_e.swInputDimValOnCreate aufrufen, um das Dialogfeld zu unterdrücken, in das der Benutzer den Dimensionswert eingeben kann.
Hallo
Die allgemeine Idee ist, komplette Skizzen zu erstellen, die durch Programmierung bemaßt wurden, und dann natürlich Volumenfunktionen darauf zu setzen. Aber es ist wichtig, dass es Seiten in der Skizze gibt. Daher der Test mit einer einzigen Linie und ihren Gewinnchancen.
Ich werde die Modifikationen in Kürze ausprobieren.
Danke für Ihre Hilfe!
Immer noch nicht.
Hier ist der neue Code
Dimmen swApp als Objekt
Teil als Objekt dimmen
Dim boolstatus als boolescher Wert
Dimmwert: Als boolescher Wert
Sub main()
Legen Sie swApp = Application.SldWorks fest
Set Part = swApp.ActiveDoc
Wert = swApp.GetUserPreferenceToggle(swUserPreferenceToggle_e.swInputDimValOnCreate)
Wenn Wert = Wahr, dann
boolstatus = swApp.SetUserPreferenceToggle(swUserPreferenceToggle_e.swInputDimValOnCreate, falsch)
Ende, wenn
boolstatus = Part.Extension.SelectByID2("Flächenebene", "PLANE", 0, 0, 0, Falsch, 0, Nichts, 0)
Part.SketchManager.InsertSketch True
SkSegment als Objekt dimmen
Set skSegment = Part.SketchManager.CreateLine(0#, 0#, 0#, 0.051925, 0#, 0#)
boolstatus = Part.Extension.SelectByID2("Linie1", "SKETCHSEGMENT", 1.97416243507319E-02, -1.20689440993789E-03, 0, Falsch, 0, Nichts, 0)
MyDisplayAls Objekt dimmen
Set myDisplayDim = Part.AddDimension2(2.59101957793034E-02, -1.59578260869565E-02, 0)
MyDimension als Objekt dimmen
Set myDimension = Part.Parameter("D1@Esquisse1")
myDimension.SystemValue = 0,05
Part.SketchManager.InsertSketch True
boolstatus = swApp.SetUserPreferenceToggle(swUserPreferenceToggle_e.swInputDimValOnCreate, Wert)
Ende Sub
Es bleibt an der gleichen Stelle hängen

Hier ist die Fehlermeldung:

Meiner Meinung nach kommt es daher, dass Sie den Namen der Bewertung ausgewählt haben. Wenn Sie es mehrmals versucht haben, erhöht SW die Skizzennummern, so dass der Inhalt von mydimension leer ist, wenn es nicht aufgerufen wird, D1@Esquisse1 ist.
Versuchen Sie also stattdessen:
Dim swApp As Object
Dim Part As SldWorks.ModelDoc2
Dim boolstatus As Boolean
Dim value As Boolean
Sub main()
Set swApp = Application.SldWorks
Set Part = swApp.ActiveDoc
value = swApp.GetUserPreferenceToggle(swUserPreferenceToggle_e.swInputDimValOnCreate)
If value = True Then
boolstatus = swApp.SetUserPreferenceToggle(swUserPreferenceToggle_e.swInputDimValOnCreate, False)
End If
boolstatus = Part.Extension.SelectByID2("Plan de face", "PLANE", 0, 0, 0, False, 0, Nothing, 0)
Part.SketchManager.InsertSketch True
Dim skSegment As Object
Set skSegment = Part.SketchManager.CreateLine(0#, 0#, 0#, 0.051925, 0#, 0#)
boolstatus = Part.Extension.SelectByID2("Line1", "SKETCHSEGMENT", 1.97416243507319E-02, -1.20689440993789E-03, 0, False, 0, Nothing, 0)
Dim myDisplayDim As SldWorks.DisplayDimension
Set myDisplayDim = Part.AddDimension2(2.59101957793034E-02, -1.59578260869565E-02, 0)
Dim myDimension As SldWorks.Dimension
Set myDimension = myDisplayDim.GetDimension
myDimension.SystemValue = 0.05
Part.SketchManager.InsertSketch True
boolstatus = swApp.SetUserPreferenceToggle(swUserPreferenceToggle_e.swInputDimValOnCreate, value)
End Sub
Wenn nicht, versuchen Sie es mit dem Makro in einem neuen Raum!? Die Skizzen und die Namen der Bemaßungen werden wieder auf Null stehen!?
Ja @Cyril.f, es scheint zu funktionieren!!
Ich analysiere den Code, danke!
Es ist in Ordnung, es ist das, was ich wollte.
Vielen Dank an alle für Ihre Hilfe!!