Ik ben nieuw in VBA en code in het algemeen en ik ben momenteel het maken van een macro die importeert puntcoördinaten uit een tekstbestand om een spline te maken.
Ik heb al veel informatie online verzameld, maar ik zit vast bij het maken van een tabel uit het tekstbestand.
Het grootste probleem dat ik tegenkom is het volgende: mijn waarden splitsen en ze rangschikken in een tabel die ik later zou kunnen bellen (om mijn punten te plaatsen, de posities ervan te vergelijken enz ...)
Hier is waar ik ben:
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 het berichtvenster dat verschijnt, heb ik echter alleen de eerste waarde die wordt weergegeven. Ik heb de indruk dat de splitsing alleen het eerste gesneden deel overhoudt.
Omdat ik nieuw ben in code/VBA, houd ik rekening met alle adviezen
Hallo, het probleem komt van de variabele InputString. Door de splitsing wordt een arrayvariabele van dimensie 6 gemaakt, vandaar de lege waarde voor secondValue.
Wanneer u een tekenreeks wilt splitsen, moet u de opmaak van de invoergegevens van het tekstbestand beheersen met een bekend scheidingsteken en een gemasterde tekenreeks. Voeg indien nodig tests toe om er zeker van te zijn dat de inhoud van de variabele niet leeg is en loop om bij de eerste variabele te komen die gegevens bevat. Een ander punt: deze regel lijkt nutteloos te zijn als de gegevens al zijn geformatteerd in x.xxxx
Moet je het echt via macro's doen? Het kan voldoende zijn om het te importeren door Curve die door XYZ-punten gaat:
Indien nodig hoeft u mogelijk alleen uw tekstbestand te transformeren om het compatibel te maken met de functie. Anders denk ik dat ik al andere macro's over het onderwerp heb gezien:
of
En er zijn er nog meer, afhankelijk van de behoefte.
@Cyril_f , ik had niet gemerkt dat mijn schilderij veel groter was dan dat. Ik dacht dat de splitsing slechts 2 elementen zou hebben behouden, het rechterdeel van " " en het linkerdeel. Als ik vervang door dit:
values = Split(Trim(inputString), " ")
Zou ik nog maar 2 elementen over hebben in mijn schilderij?
@sbadenis , het is waar dat deze oplossing sneller is, het probleem is dat de curve die ik ga genereren een scherpe rand moet hebben. Als ik deze functie doorloop, dan is de rand afgerond. Tenzij er een argument is voor deze functie dat me in staat stelt geen continuïteit in tangentie te hebben? Met betrekking tot de macro " Create a spline " van de CAD Coder. Ik had de gelegenheid om er eens naar te kijken en het werkt. Behalve dat mijn grote blokkade is om een array te maken met de waarden. In zijn code doet THE CAD CODER een eenvoudige stap, waarbij ik de gegevens één voor één uit mijn tekstbestand moet ophalen.
Mijn tekst is invoergegevens die ik niet kan wijzigen.
Een kleine aanvullende vraag algemener: Waar kan ik een lijst met solidworks VBA-commando's vinden? Ik kan de objectverkenner zien, maar dat verklaart de functie niet. Zoals wat:
Functie CreateSpline3(PointData, Surfs, Direction, SimulateNaturalEnds As Boolean, Status) Als object
Hoe weet ik welke soorten gegevens voor elk argument worden gevraagd?
Hallo De functie Trimmen verwijdert spaties voor en na tekst, niet precies in het midden. Ik heb geen wijzigingen in uw code gezien, het is nog steeds dezelfde lijn, dus het resultaat zal hetzelfde zijn (6-dimensionale array). Twee opties: gebruik de Mid-functie en verwijder de spaties met de Trim-functie of voer de eerste splitsing uit en verwijder vervolgens de lege waarden in de array zodat deze de juiste grootte heeft. Hieronder vindt u een codefragment waarmee u gegevens kunt overbrengen van een array naar een tijdelijke array om lege rijen te verwijderen en het formaat ervan te wijzigen:
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