![]() |
![]() |
|
![]() |
![]() |
|
Programmierung Rat & Tat für Programmierer |
![]() |
|
Themen-Optionen | Ansicht |
![]() |
#1 |
Hero
![]() |
![]() Hallo Leute!
Möchte eine Funktion schreiben die mir aus einem String zB.: "23+123+83+79" die Summe der einzelnen Zahlen ausgibt. Hänge aber bereits schon hier: Public Function textzahl(text As String) Dim d, pos, i As Long Do While (Len(text) > 0) pos = InStr(text, "+") d = Val(Left(text, pos - 1)) text = Mid(text, pos + 1) Debug.Print (d) Loop End Function Fehlermeldung von VBA: Unzulässiger Prozeduraufruf oder ungültiges Argument (Fehler 5) Was ist da falsch und muss besser oder anders gemacht werden? Coolbininet
____________________________________
Wenn du eine helfende Hand brauchst, tust du gut wenn, du sie an den eigenen Armen suchst! Website RI Nur der Kleingeist hält Ordnung das Genie überblick das Chaos! Genie und Wahnsinn liegen dicht nebeneinander, sie können und sollen nicht getrennt werden. |Marktorientierter Sozialist|Menschenfreund|Teamfähig|Analytiker|Logi ker| If you want to see the Sky, fuck a Duck and learn to fly! Mein Glück ist nicht von dieser Welt, insbesondere im Umgang mit Microsoft Produkten! Möge die MACHT mit uns sein! |
![]() |
![]() |
![]() |
#2 |
Master
![]() Registriert seit: 13.08.2003
Beiträge: 624
|
![]() ich habs nicht gestetet, vermute aber mal folgendes:
pos = InStr(text, "+") d = Val(Left(text, pos - 1)) text = Mid(text, pos + 1) Wenn du beim letzten durchlauf bist, findest du kein "+" mehr, dh. pos wird 0, wenn du dann bei left(text,pos-1) als Startwert -1 hast (da ja pos=0), kann er das nicht verarbeiten. Wenns das nicht ist könntest ja mal ausfindig machen, in welcher Zeile der Fehler ist. mfg Thomas |
![]() |
![]() |
![]() |
#3 |
Hero
![]() |
![]() Habe jetzt eine
Public Function textzahl(text As String) Dim d, da, pos, i, a, ausgabe As Long Do pos = InStr(text, "+") If (pos < 1) Then da = text Exit Do Else d = Val(Left(text, pos - 1)) + d text = Mid(text, pos + 1) Exit Do End If Loop Until (Len(text) = 0) ausgabe = d + da Debug.Print (ausgabe) End Function Ist umständlich, geht's einfacher? Grüsse Coolbininet
____________________________________
Wenn du eine helfende Hand brauchst, tust du gut wenn, du sie an den eigenen Armen suchst! Website RI Nur der Kleingeist hält Ordnung das Genie überblick das Chaos! Genie und Wahnsinn liegen dicht nebeneinander, sie können und sollen nicht getrennt werden. |Marktorientierter Sozialist|Menschenfreund|Teamfähig|Analytiker|Logi ker| If you want to see the Sky, fuck a Duck and learn to fly! Mein Glück ist nicht von dieser Welt, insbesondere im Umgang mit Microsoft Produkten! Möge die MACHT mit uns sein! |
![]() |
![]() |
![]() |
#4 |
Master
![]() Registriert seit: 13.08.2003
Beiträge: 624
|
![]() Du könntest deinen Text in ein Array splitten mit split(Stringzumsplitten,Teil) - also split("23+123+83+79","+") und machst dann ne schleife durchs Array und zählst alle Werte zusammen.
Ansonsten könnt ma deinen Code noch anders optimieren: Do pos = InStr(text, "+") If (pos < 1) Then d = d + text text = "" Else d = Val(Left(text, pos - 1)) + d text = Mid(text, pos + 1) End If Loop Until (Len(text) = 0) mfg Thomas |
![]() |
![]() |
![]() |
#5 |
Inventar
![]() Registriert seit: 13.06.2001
Beiträge: 1.830
|
![]() Andere Möglichkeit:
Code:
pos = InStr(text, "+") While (pos <> Null) And (pos <> 0) d = Val(Left(text, pos - 1)) + d text = Mid(text, pos + 1) pos = InStr(text, "+") Wend
____________________________________
Join the DNRC | Godwin\'s Law (thx@stona) Documentation is like sex: If it\'s good, it\'s very, very good. If it\'s bad, it\'s better than nothing. \"In theory, theory and practice are the same. In practice, they are not\" (Lawrence Berra) |
![]() |
![]() |
![]() |
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
|
|