Makro-Multiplikation

Hallo
Ich bräuchte Ihre VBA-Kenntnisse.

Ich habe bereits ein Makro, das eine benutzerdefinierte Eigenschaft namens WEIGHT erstellt und den Solidworks-Wert "SW-Mass" verwendet.

Ich würde gerne sehen, dass eine benutzerdefinierte SURFACE PIECE-Eigenschaft in diesem Makro erstellt wird und deren Wert das Ergebnis der Multiplikation von "SW-Masse" mit einem bestimmten numerischen Verhältnis ist.

Aber ich stecke ein bisschen mit meinem miesen VBA-Level fest... Kann mir bitte jemand helfen?

Hallo

Rufen Sie einfach den Wert ab, wandeln Sie ihn in eine Zahl um und multiplizieren Sie ihn. Konvertieren Sie das Ergebnis in Text, und fügen Sie es in die benutzerdefinierte Eigenschaft ein.

1 „Gefällt mir“

Hallo
Wenn die Version aktueller als 21 ist, ist es möglich, den Typ "equation" direkt in der "Manager-Eigenschaft" zu verwenden, andernfalls deklarieren Sie ihn in "equation manager" und erstellen Sie dann einen Link zu einer Eigenschaft, die automatisch aktualisiert wird

1 „Gefällt mir“

Vielen Dank @Cyril.f und @Lynkoa15, aber mit meinem schäbigen Level weiß ich überhaupt nicht, wie ich das anstellen soll.
Haben Sie ein kleines Codebeispiel, damit ich dies an mein Makro anpassen kann? :sweat_smile:

Hallo

Im Grunde würde es so aussehen:

Dim swApp               As SldWorks.SldWorks
Dim swModel             As SldWorks.ModelDoc2
Dim swModelDocExt       As ModelDocExtension
Dim swCustProp          As CustomPropertyManager
Dim sMasse              As String
Dim sValout             As String
Dim sVal                As String

Sub main()
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
Set swModelDocExt = swModel.Extension
Set swCustProp = swModelDocExt.CustomPropertyManager("Défaut") 'Si la propriété est dans l'onglet personnaliser, laisser vide en remplaçant "Défaut" par ""
bRet = swCustProp.Get6("Masse", False, sValout, sMasse, False, False) 'Récupération de la propriété de masse, changer le nom de la propriété en fonction de votre modèle
sVal = CStr(CDec(sMasse) * 3) 'Conversion du texte en valeur décimale, multiplication x 3 et conversion en donné de type texte
bRet = swCustProp.Set2("Ra", sVal) 'Renseignement de la propriété Ra avec la valeur convertie en texte
End Sub


3 „Gefällt mir“

Danke @Cyril.f , ich fange damit an :+1:

@Cyril habe ich die Zeilen kopiert / eingefügt und geändert, was geändert werden sollte, aber die Makroblöcke in der sVal-Zeile:


Ich habe in der Syntax nachgeschaut, aber ich sehe nichts Ungewöhnliches. Ich hatte ein Verhältnis mit Dezimalzahl, also habe ich mit einem Verhältnis von 2 getestet, aber das Makro stürzt immer noch ab.
Haben Sie eine Vorstellung von dem Problem?
Vielen Dank

Hallo
Was ist die Fehlermeldung und welche Version von SW verwenden Sie?

2 „Gefällt mir“

Hallo @Cyril.f
Hier ist die Fehlermeldung:
image
Und ich bin auf Solidworks 2022 Sp05

Ich habe dieses Problem nicht, Möglichkeit, mir eine Testdatei mit den zu überprüfenden Eigenschaften zu senden?

1 „Gefällt mir“

Ok, hier ist der Teil, den ich getestet habe, sowie das Makro:
HEXA-STANGEN-TEST. SLDPRT (567.1 KB)
00-MASSE-OBERFLÄCHE.swp (36 KB)

Kein Problem für mich, unabhängig vom Wert des Koeffizienten (Sie müssen einen Punkt als Komma setzen).
Schauen Sie vielleicht in den Makroprojektreferenzen nach:
image
Andernfalls kann es zu einer Feinheit auf der Seite des Gebietsschemas der Station und des Dezimaltrennzeichens kommen.

2 „Gefällt mir“

@Cyril.f
Hier sind meine Makro-Referenzen:

Und hier sind meine regionalen Parameter^tres:

Versuchen Sie, das Komma durch einen Punkt zu ersetzen.

2 „Gefällt mir“

Hallo @Cyril.f
Das Makro funktioniert nur, wenn ich die Eigenschaft SURFACE PIECE in F8 erstelle.
Wenn das Feld nicht erstellt wird, passiert nichts.
Ich habe nach Möglichkeiten gesucht, das Feld automatisch zu erstellen, aber ich komme nicht weiter.

Hier ist, woran ich erfolglos versucht habe herumzubasteln:

Option Explizit

Dim swApp als SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swModelDocExt als ModelDocExtension
Dim swCustProp As CustomPropertyManager
Sonne sMasse als Schnur
Dim sValout As String
Dim sVal As String
Dim bRet als Zeichenfolge

Sub main()

Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
Set swModelDocExt = swModel.Extension

Set swCustProp = swModelDocExt.CustomPropertyManager("PC") 'Wenn sich die Eigenschaft auf der Registerkarte "Anpassen" befindet, lassen Sie das Feld leer, indem Sie "PC" durch "" ersetzen

bRet = swCustProp.Get6', False, sValout, sMasse, False, False) 'Abrufen der Masseneigenschaft, Ändern des Namens der Eigenschaft entsprechend Ihrem Modell

sVal = CStr(CDec(sMass) * 2) 'Text in Dezimalwert umwandeln, x VERHÄLTNIS multiplizieren und in Textdaten umwandeln

'bRet = swCustProp.Set2("SURFACE PIECE", sVal) 'Füllen Sie die Eigenschaft SURFACE PIECE mit dem Wert, der in Text umgewandelt wurde

bRet = swModel.AddCustomInfo3("PC", "SURFACE PIECE", wert)

Ende Sub

Ich habe es mit diesem Befehl versucht, aber ich denke, etwas stimmt nicht:
bRet = swModel.AddCustomInfo3("PC", "SURFACE PIECE", wert)

Haben Sie bitte eine Idee, um das zu korrigieren?

Anstatt:
'bRet = swCustProp.Set2("OBERFLÄCHENSTÜCK", sVal)

Geben Sie etwas aus wie:
bRet = swCustPropMgr.Add3(" SURFACE STÜCK ", swCustomInfoType_e.swCustomInfoDate, sVal, swCustomPropertyAddOption_e.swCustomPropertyDeleteAndAdd)

Set ist, wenn die Eigenschaft bereits vorhanden ist, scheint es mir.

Siehe diesen Link:
https://help.solidworks.com/2020/English/api/sldworksapi/Add_and_Get_Custom_Properties_Example_VB.htm?verRedirect=1

Oder noch vollständiger:

2 „Gefällt mir“

Das stimmt.
Wenn die Eigenschaft nicht existiert, müssen Sie sie erstellen, wenn sie existiert, kommt es auch vor, dass SW nicht schreiben kann (das ist mir bei alten Dateien passiert) und in diesem Fall müssen Sie die Eigenschaft löschen und neu erstellen.

2 „Gefällt mir“

Ich antworte mir, es ist mit Add3 behoben, was es Ihnen ermöglicht, zu überschreiben, wenn die Eigenschaft bereits vorhanden ist.
Also im Grunde:

swCustProp.Add3("SURFACE PIECE", 30, sVal, 1)
2 „Gefällt mir“

Hallo, danke für Ihre Antworten.
Das Makro 00-MASS-SURFACE funktioniert gut. Wissen Sie jedoch, wie Sie nur 3 Dezimalstellen für den Flächenwert haben können?
00-MASSE-OBERFLÄCHE.swp (45.5 KB)

Und ich möchte dieses Makro in das 00-MACRO HEXA-Makro unten integrieren:
00-MAKRO HEXA.swp (63.5 KB)

Ich habe getestet, aber ich bekomme diesen Fehler, wenn ich das Makro starte:
image

Das Debuggen gibt mir Folgendes:

Wissen Sie, wie Sie dies korrigieren können?

Vielen Dank

Hallo

Für den Fehler ist es wahrscheinlich die Variable swCustProp.Get6, die leer ist, sodass die Eigenschaft entweder nicht vorhanden ist oder ein Problem mit der Variablendeklaration vorliegt.
Um auf 3 Dezimalstellen zu begrenzen, müssen Sie die Funktion "Format" verwenden:

    sVal = CStr(Format(CDec(sMasse) * 0.0556, "0.000"))

2 „Gefällt mir“