Stimmt. Asche auf mein Haupt! Was passiert, wenn die Zelle leer ist, hatte ich vergessen zu testen.
:-/
Aus irgend einem Grund ist dann nämlich das Argument str = "0" statt ein leerer String und es wird
die gleiche Meldung ausgegeben wie wenn in der Zelle ein Zeichen steht, nämlich dass der Text 21
Zeichen zu kurz ist. Wieder was gelernt.
Aber das Problem fängst du mit dem wenn() sowieso ab. Ist ja auch sinnvoll, keine Fehlermeldung
auszugeben, wenn noch niemand was eingegeben hat. ;-)
Habe übrigens gerade noch einen kleinen Fehler gefunden, deshalb hier nochmal der ganze Code. Nur
die Zeile «msg = "Eintrag " & CStr(STR_LEN - EXPECT_LEN) & " Zeichen zu lang."» hat sich geändert.
~~Ab hier Basic-Code~~~~~~~~~
' Rolf Lochbühler, 2013-01-27
Option Explicit
Public Function valid( ByVal str As String ) As String
Dim char As String
Dim EXPECT_LEN As Integer
Dim i As Integer
Dim msg As String
Dim STR_LEN As Integer
EXPECT_LEN = Len( "XX-XXXXX-9999-X99-N999" )
STR_LEN = Len( str )
If STR_LEN < EXPECT_LEN Then
msg = "Eintrag " & CStr(EXPECT_LEN - STR_LEN) & " Zeichen zu kurz."
ElseIf STR_LEN > EXPECT_LEN Then
msg = "Eintrag " & CStr(STR_LEN - EXPECT_LEN) & " Zeichen zu lang."
Else
i = 0
msg = ""
While msg = "" And i < STR_LEN
i = i + 1
char = Mid(str,i,1)
Select Case i
Case 1, 2, 4, 5, 6, 7, 8, 15:
If char < "A" Or char > "z" Then
msg = "Erwarte Buchstabe statt " & char & " an Stelle " & CStr(i) & "."
End If
Case 3, 9, 14, 18:
If char <> "-" Then
msg = "Erwarte Bindestrich statt " & char & " an Stelle " & CStr(i) & "."
End if
Case 10, 11, 12, 13, 16, 17, 20, 21, 22:
If char < "0" Or char > "9" Then
msg = "Erwarte Ziffer statt " & char & " an Stelle " & CStr(i) & "."
End If
Case 19:
If char <> "N" Then
msg = "Erwarte N statt " & char & " an Stelle 19."
End if
End Select
Wend
End If
valid = "Ok"
If msg <> "" Then
valid = "Fehler: " & msg
End If
End Function
~~Ende des Basic-Codes~~~~~~~~~
Am 2013-01-27 um 20:26 schrieb Achim Pabel <Achim.Pabel@gmx.de>:
Hallo Rolf,
ich glaube ich habe verstanden.
In (ausgeblendeter) Celle C2 für Celle B2 (wo die Kundennummer
eingetragen wird)
=wenn( B2<>"" ; valid(B2) ; "" )
Ist das so richtig?
Gruß Achim
--
openSUSE 11.4
KDE – Frei sein!
Plattform-Version 4.6.00 (4.6.0) "release 6"
LibreOffice 3.3.4
OOO340m1 (Build:502)
---
Am Sonntag, 27. Januar 2013, 20:15:35 schrieb Achim Pabel:
[...]
Aber wie wird er eingebaut (1) und wie wird dieser aufgerufen?
Automatisch - oder per Icon?
Wie verbinde ich den Code mit den einzelnen Spalten B2 bis B101 ?
Ich (und sicherlich auch andere) bin (sind) sehr gespannt auf
Deine nächste Mail !
[...]
(1) Ich meinde damit nicht:
Copy + Paste in
Menü::Extras::Makros verwalten::Libre Office Basic ...
Ich habe deine Anmerkung, dass du kein Basic sprichst, gesehen.
Aber wie wäre es mit einem fertigen Makro? ;-)
Das hat den Vorteil, dass die Formel =valid(...) nur eine Zelle
in deinem Spreadsheet belegt. Außerdem bekommt der Anwender
einen Hinweis darauf, wo in der Eingabe der erste Fehler ist.
~~Ab hier Basic-Code~~~~~~~~~
[...]
--
Informationen zum Abmelden: E-Mail an users+help@de.libreoffice.org
Probleme? http://de.libreoffice.org/hilfe-kontakt/mailing-listen/abmeldung-liste/
Tipps zu Listenmails: http://wiki.documentfoundation.org/Netiquette/de
Listenarchiv: http://listarchives.libreoffice.org/de/users/
Alle E-Mails an diese Liste werden unlöschbar öffentlich archiviert
Context
- Re: [de-users] Calc :: Plausibilitätsprüfung :: XX-XXXXX-9999-X99-N999 (continued)
Privacy Policy |
Impressum (Legal Info) |
Copyright information: Unless otherwise specified, all text and images
on this website are licensed under the
Creative Commons Attribution-Share Alike 3.0 License.
This does not include the source code of LibreOffice, which is
licensed under the Mozilla Public License (
MPLv2).
"LibreOffice" and "The Document Foundation" are
registered trademarks of their corresponding registered owners or are
in actual use as trademarks in one or more countries. Their respective
logos and icons are also subject to international copyright laws. Use
thereof is explained in our
trademark policy.