Wert ist numerisch aber keine Zahl?

Antwort erstellen


Um automatische Eingaben zu unterbinden, musst du die nachfolgende Aufgabe lösen.

BBCode ist eingeschaltet
[img] ist ausgeschaltet
[flash] ist ausgeschaltet
[url] ist eingeschaltet
Smilies sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: Wert ist numerisch aber keine Zahl?

Re: Wert ist numerisch aber keine Zahl?

von Stephan » Do, 11.10.2018 10:43

ja, es funktioniert hier mit 5.1.6 (Windows 7). Ebenso funktioniert es mit LO 6.0.3.


Gruß
Stephan
Dateianhänge
Makro.gif
Makro.gif (69.12 KiB) 380 mal betrachtet

Re: Wert ist numerisch aber keine Zahl?

von Toxitom » Do, 11.10.2018 08:58

Hey Stephan,
Das kann ich leider nicht nachvollziehen. Wenn ich den Code hier aus dem Forum heraus kopiere und die bewusste Zeile auskommentiere, läuft er in Excel 2003 ohne Probleme.
Füge ich "Option VBASupport 1" hinzu (bei weiterhin auskommentierter Zeile) läuft er auch unter AOO 4.1.5 und LO 5.1.6.
Sicher? hier das bild bei mir : Win 10, LO 5.3.1

Zwischenablage01.png
Zwischenablage01.png (29.94 KiB) 399 mal betrachtet
VG
Tom

Re: Wert ist numerisch aber keine Zahl?

von Stephan » Do, 11.10.2018 08:48

Hallo Tom,
isNumeric() prüft lediglich, ob der übergebene Ausdruck in eine gleichlautentde Zahl umgewandelt werden kann - also ob es sich um Ziffern handelt.


Danke, das ist die (für mich) wichtige Info. Dessen war ich mir nicht bewusst.
Es ist im übrigen nicht korrekt, dass das Ganze in VBA auch ohne diese Zeile läuft. Hab hier zwar kein VBA, aber über die Option "Option VBASupport 1" kommt nicht das korrekte Ergebnis raus, wenn Du die Zeile "If IsNumeric(ret) Then ret = VAL(ret)" auskommentierst und als Übergabewert wählst:
""Ringstrasse 18b".
Das kann ich leider nicht nachvollziehen. Wenn ich den Code hier aus dem Forum heraus kopiere und die bewusste Zeile auskommentiere, läuft er in Excel 2003 ohne Probleme.
Füge ich "Option VBASupport 1" hinzu (bei weiterhin auskommentierter Zeile) läuft er auch unter AOO 4.1.5 und LO 5.1.6.

Alle 3 Dinge jeweils für "Ringstrasse 18b" als auch "Ringstrasse 18 b".

Probleme hingegen bei z.B. "Ringstrasse B-18", dessen bin ich mir aber bewusst. Überraschenderweise sagte mir:
https://dbwiki.net/wiki/VBA_Tipp:_Stra% ... xtrahieren

bereits gestern, das es garkeine 100%ige Lösung für beliebige Straße+Hausnummer-Kombinationen geben soll, ich weiß aber garnicht was dabei in Praxis für Straße+Hausnummer alles vorkommen kann.


Gruß
Stephan

Re: Wert ist numerisch aber keine Zahl?

von Toxitom » Do, 11.10.2018 08:15

Hallo Stephan,

die Zeile ist zwingend, soll alles korrekt funktionieren.

Es ist im übrigen nicht korrekt, dass das Ganze in VBA auch ohne diese Zeile läuft. Hab hier zwar kein VBA, aber über die Option "Option VBASupport 1" kommt nicht das korrekte Ergebnis raus, wenn Du die Zeile "If IsNumeric(ret) Then ret = VAL(ret)" auskommentierst und als Übergabewert wählst:
""Ringstrasse 18b".

isNumeric() prüft lediglich, ob der übergebene Ausdruck in eine gleichlautentde Zahl umgewandelt werden kann - also ob es sich um Ziffern handelt.

Die Umwandlung selbst erfolgt über die Val() Funktion (wobei ich hier wohl eher die CInt() - Funktion nehmen würde...)

Die Case Schleife benötigt als Entscheidungskriterium entweder einen String oder einen Wert - ich denke hier steckt die "Ungenauigkeit".

Für weitere Erkenntnisse musst Du selbst "graben"... zu wenig Zeit derzeit.

VG
Tom

Wert ist numerisch aber keine Zahl?

von Stephan » Mi, 10.10.2018 22:49

Hallo,

kann mir bitte jemand erklären warum in Folgendem Makro-Beispiel die Zeile:

Code: Alles auswählen

If IsNumeric(ret) Then ret = VAL(ret)
zwingend ist? Ist IsNumeric nicht bereits der Beleg das es eine Zahl ist, das Verhalten ist hingegen ja so als wenn IsNumeric nur prüft das es eine Ziffer bzw. ein 'Zahlenstring' wäre?

Hinweis: In VBA läuft das Ganze auch ohne diese Zeile und konsequenterweise läuft das Ganze auch in OO ohne diese Zeile wenn im Kopf des Moduls die VBA-Kompatibilitätsoption (Option VBASupport 1) steht.

Code: Alles auswählen

Sub aufruf()
MsgBox Strasse("Ringstrasse 18-20")
End Sub

Function split_Strasse_HausNr(Adresse)
    Dim isNummer As Boolean
    Dim ret
 
    isNummer = False
    split_Strasse_HausNr = 0
 
    For i = Len(Adresse) To 1 Step -1
        ret = Mid(Adresse, i, 1)
        If IsNumeric(ret) Then ret = VAL(ret)
        Select Case ret
            Case 0 To 9
                isNummer = True
            Case " "
            Case "-"
            Case "/"
            Case Else
                If isNummer = True Then
                    split_Strasse_HausNr = i
                    Exit For
                End If
        End Select
    Next
End Function

Function Strasse(Adresse)
    x = split_Strasse_HausNr(Adresse)
    Strasse = Left(Adresse, x)
End Function

Gruß
Stephan

Nach oben