Jestem nowy w VBA i ogólnie w kodzie, a obecnie tworzę makro, które importuje współrzędne punktu z pliku tekstowego w celu utworzenia splajnu.
Zebrałem już wiele informacji online, ale utknąłem na części tworzenia tabeli z pliku tekstowego.
Największym problemem, jaki napotykam, jest: podzielenie moich wartości i ułożenie ich w tabelę, którą mógłbym później wywołać (aby umieścić moje punkty, porównać ich pozycje itp. ...)
Oto, gdzie jestem:
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
Jednak w wyświetlonym oknie komunikatu mam tylko pierwszą wyświetlaną wartość. Mam wrażenie, że podział zachowuje tylko pierwszą wyciętą część.
Ponieważ jestem nowy w kodowaniu/VBA, biorę pod uwagę wszystkie porady
Witaj, problem wynika ze zmiennej InputString. Podział tworzy zmienną tablicową o wymiarze 6, stąd pusta wartość dla secondValue.
Jeśli chcesz podzielić ciąg, musisz opanować formatowanie danych wejściowych pliku tekstowego za pomocą znanego separatora i opanowanego ciągu. W razie potrzeby dodaj testy, aby upewnić się, że zawartość zmiennej nie jest pusta i przejdź do pierwszej zawierającej dane. Kolejną kwestią jest to, że ta linia wydaje się być bezużyteczna, jeśli dane są już sformatowane w x.xxxx
Czy naprawdę musisz to robić za pomocą makr? Może wystarczyć zaimportowanie go za pomocą krzywej przechodzącej przez punkty XYZ:
W razie potrzeby może być konieczne przekształcenie pliku tekstowego, aby był zgodny z tą funkcją. W przeciwnym razie wydaje mi się, że widziałem już inne makra na ten temat:
@Cyril_f nie zauważyłem, żeby mój obraz był znacznie większy. Myślałem, że podział zachowałby tylko 2 elementy, prawą część " " i lewą część. Jeśli zamienię na to:
wartości = Split(Trim(inputString), " ")
Czy w moim obrazie pozostaną tylko 2 elementy?
@sbadenis , to prawda, że to rozwiązanie jest szybsze, problem polega na tym, że krzywa, którą zamierzam wygenerować, musi mieć ostrą krawędź. Jeśli przejdę przez tę funkcję, krawędź jest zaokrąglona. Chyba, że istnieje argument za tą funkcją, który pozwala mi nie mieć ciągłości styczności? Jeśli chodzi o makro " Utwórz splajn " w programie CAD Coder. Miałem okazję się temu przyjrzeć i to działa. Z tym, że moim dużym blokiem jest stworzenie tablicy z wartościami. W swoim kodzie THE CAD CODER wykonuje prosty przyrost, w którym muszę pobrać dane z mojego pliku tekstowego jeden po drugim.
Mój tekst to dane wejściowe, których nie mogę zmienić.
Małe dodatkowe pytanie bardziej ogólne: Gdzie mogę znaleźć listę poleceń solidworks VBA? Widzę eksplorator obiektów, ale to nie wyjaśnia funkcji. Lubię co:
Funkcja CreateSpline3(PointData, surfs, direction, simulateNaturalEnds as Boolean, Status) jako obiekt
W jaki sposób mogę dowiedzieć się, jakie są typy danych wymaganych dla każdego argumentu?
Witam Funkcja Przytnij usuwa spacje przed i po tekście, a nie w jego środku. Nie widziałem żadnych zmian w twoim kodzie, to nadal ta sama linia, więc wynik będzie taki sam (tablica 6-wymiarowa). Dwie opcje, albo użyj funkcji Mid i usuń spacje za pomocą funkcji Trim, albo wykonaj początkowy podział, a następnie usuń puste wartości w tablicy, aby miała odpowiedni rozmiar. Poniżej znajduje się fragment kodu, który umożliwia przeniesienie danych z tablicy do tablicy tymczasowej w celu usunięcia pustych wierszy i zmiany jej rozmiaru:
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