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 <[email protected]>:

> 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 [email protected]
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

Antwort per Email an