Solidworks VBA-Makro (06.03.2024)

Hallo ihr alle!

Ich bin neu in VBA und Code im Allgemeinen und erstelle derzeit ein Makro, das Punktkoordinaten aus einer Textdatei importiert, um einen Spline zu erstellen.

Ich habe bereits viele Informationen online gesammelt, aber ich komme nicht weiter, wenn es darum geht, eine Tabelle aus der Textdatei zu erstellen.

Das größte Problem, auf das ich stoße, ist folgendes: meine Werte aufzuteilen und sie in einer Tabelle anzuordnen, die ich später aufrufen könnte (um meine Punkte zu platzieren, die Positionen von ihnen zu vergleichen usw. ...)

Hier bin ich:

 Private Sub cmdDecoupe_Click()
 
     Dim inputString, values() As String
     Dim firstValue, secondValue As String
     
     ' Chaîne de caractères
     inputString = "0.0013     0.0010"
     
     ' Supprimer les espaces en trop et divise la chaîne en deux parties
     values = Split(Trim(inputString), " ")
     
     ' Si la longueur de caractères est supérieur ou égale à 1 alors assigne les valeurs aux variables et remplace les points par des virgules
     If UBound(values) >= 1 Then
         firstValue = CDbl(Replace(values(0), ",", "."))
         secondValue = CDbl(Replace(values(1), ",", "."))
         
         ' Affiche les valeurs dans la fenêtre de la console (à des fins de vérification)
         MsgBox ("Première valeur : " & firstValue & " ;Deuxième valeur : " & secondValue)

     Else
         ' Gère le cas où la chaîne ne peut pas être correctement divisée
         MsgBox "La chaîne d'entrée n'est pas au format attendu.", vbExclamation
     End If
 
>End Sub

In dem angezeigten Meldungsfeld wird jedoch nur der erste Wert angezeigt. Ich habe den Eindruck, dass beim Spagat nur der erste geschnittene Teil erhalten bleibt.

Da ich neu in Code/VBA bin, berücksichtige ich alle Ratschläge :smiley:

Hallo, das Problem kommt von der Variablen InputString.
Durch die Teilung wird eine Array-Variable der Dimension 6 erstellt, daher der leere Wert für secondValue.
image
Wenn Sie eine Zeichenfolge aufteilen möchten, müssen Sie die Formatierung der Eingabedaten der Textdatei mit einem bekannten Trennzeichen und einer gemasterten Zeichenfolge beherrschen.
Fügen Sie bei Bedarf Tests hinzu, um sicherzustellen, dass der Inhalt der Variablen nicht leer ist, und eine Schleife, um zur ersten Variablen zu gelangen, die Daten enthält.
Ein weiterer Punkt: Diese Zeile scheint nutzlos zu sein, wenn die Daten bereits in x.xxxx formatiert sind

firstValue = CDbl(Replace(values(0), ",", "."))
3 „Gefällt mir“

Müssen Sie das wirklich über Makros tun?
Es könnte ausreichen, es zu importieren, indem die Kurve durch XYZ-Punkte verläuft:
image
Falls erforderlich, müssen Sie möglicherweise nur Ihre Textdatei transformieren, um sie mit der Funktion kompatibel zu machen.
Ansonsten glaube ich, dass ich schon andere Makros zu dem Thema gesehen habe:

oder

Und es gibt noch andere, je nach Bedarf.

3 „Gefällt mir“

Hallo, danke für Ihre Antworten.

@Cyril war mir nicht aufgefallen, dass mein Bild viel größer war. Ich dachte, dass die Aufteilung nur 2 Elemente behalten hätte, den rechten Teil von " " und den linken Teil. Wenn ich durch dies ersetze:

values = Split(Trim(inputString), " ")

Hätte ich nur noch 2 Elemente in meinem Gemälde?

@sbadenis , es stimmt, dass diese Lösung schneller ist, das Problem ist, dass die Kurve, die ich erzeugen werde, eine scharfe Kante haben muss. Wenn ich diese Funktion durchlaufe, dann wird die Kante abgerundet. Es sei denn, es gibt ein Argument für diese Funktion, das es mir erlaubt, keine Stetigkeit in der Tangentialität zu haben?
In Bezug auf das Makro " Erstellen eines Splines " des CAD-Programmierers. Ich hatte die Gelegenheit, es mir anzuschauen und es funktioniert. Abgesehen davon, dass mein großer Block darin besteht, ein Array mit den Werten zu erstellen. In seinem Code führt THE CAD CODER ein einfaches Inkrement durch, bei dem ich die Daten nacheinander aus meiner Textdatei abrufen muss.

Mein Text besteht aus Eingabedaten, die ich nicht ändern kann.

Eine kleine zusätzliche Frage allgemeiner: Wo finde ich eine Liste der Solidworks VBA-Befehle? Ich kann den Objekt-Explorer sehen, aber das erklärt die Funktion nicht.
Zum Beispiel:

Funktion CreateSpline3(PointData, Surfs, Direction, SimulateNaturalEnds As Boolean, Status) als Objekt

Wie kann ich wissen, welche Datentypen für jedes Argument angefordert werden?

Vielen Dank

Hallo
Mit der Funktion "Zuschneiden" werden Leerzeichen vor und nach dem Text entfernt, nicht direkt in der Mitte.
Ich habe keine Änderungen an Ihrem Code gesehen, es ist immer noch die gleiche Zeile, sodass das Ergebnis dasselbe ist (6-dimensionales Array).
Zwei Optionen: Verwenden Sie entweder die Mid-Funktion und entfernen Sie die Leerzeichen mit der Trim-Funktion oder führen Sie die anfängliche Aufteilung durch und löschen Sie dann die leeren Werte im Array, damit es die richtige Größe hat.
Im Folgenden finden Sie einen Codeausschnitt, mit dem Sie Daten aus einem Array in ein temporäres Array übertragen können, um leere Zeilen zu entfernen und die Größe zu ändern:

     For i =0 To UBound(values)
        If values(i) <> "" Then
            ReDim Preserve tmpValues(j)
            tmpValues(j) = values(i)
            j = j + 1
        End If
    Next i
    ReDim values(UBound(tmpValues))
    For j = 0 To UBound(tmpValues)
        values(j) = tmpValues(j)
    Next j

Sonst muss man dann mit den Kettenmanipulationen spielen.
Für SW-API-Hilfe: CreateSpline3-Methode (ISketchManager) - 2023 - SOLIDWORKS API-Hilfe

3 „Gefällt mir“