Anführungszeichen in einem Makro

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

1 „Gefällt mir“

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

3 „Gefällt mir“

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.

1 „Gefällt mir“

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... (??)

1 „Gefällt mir“

@ 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. 

1 „Gefällt mir“

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.

1 „Gefällt mir“

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

 

2 „Gefällt mir“

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!?

1 „Gefällt mir“

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!!

1 „Gefällt mir“