Anführungszeichen in einem Makro

Ich möchte ein sehr einfaches Makro mit einer Zeile mit der Bewertung erstellen:

Ich mache die Aufnahme, und wenn ich das Makro starte, stoppt es bei der Dimension, in der das schwebende Fenster mich auffordert, einen Wert einzugeben. Ich hätte mir gewünscht, dass sich die Bewertung von 50 von selbst setzt. Aber selbst wenn ich einen Wert eingebe, geht das Programm in das Debuggen, weil es darauf wartet, die bereits eingestellte Dimension von 50 setzen zu können.

Weiß jemand, wie man vorgeht, um eine Skizze automatisch zu bemaßen?

1 „Gefällt mir“

Hallo

Sie müssen die Option Bemaßung eingeben deaktivieren

1 „Gefällt mir“

Im Code müssen Sie am Anfang hinzufügen: boolstatus = swApp.SetUserPreferenceToggle(swInputDimValOnCreate, False) dann am Ende des Codes boolstatus = swApp.SetUserPreferenceToggle(swInputDimValOnCreate, True)
 

1 „Gefällt mir“

@Cyril.f

Ich versuche es, aber ich erhalte eine Fehlermeldung:

Wir müssten zwei oder drei Überprüfungen durchführen, auf der einen Seite ist swapp als Sldworks.Sldworks deklariert (es kann das Problem lösen, anstatt als Objekt deklariert zu werden).

Fehlen dann nicht Referenzen in den Referenzen?

1 „Gefällt mir“

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: