inStr-Funktion etwas merkwürdig

Hallo zusammen.
Ich habe eine quadratische Tabelle, bei der in jeder Zelle eine Ziffer stehen soll. Dies will ich prüfen. Jeder Zelleninhalt wird mit

              oZelle = oBlatt.getCellByPosition(iI,iJ)
             sTmp = oZelle.String
gelesen und mit

             iErg = inStr(sZchn,sTmp)
             If iErg = 0 Then
auf Ziffer geprüft. Dies funktioniert gut, wenn der zu untersuchende Zelleninhalt ein unzulässiges Zeichen ist, das Ergebnis ist 0. Aber wehe, wenn in der zu untersuchenden Zelle garnicts ist, also "". Dann steht in iErg eine 1,??? und in sTmp ein "". Gut ich habe eine Lösung gefunden mit

             If iErg = 0 OR sTmp = "" Then
                 iMk = 0
                 Exit For
             End If
Wo kommt denn die 1 her? If iErg = 0 OR sTmp = "" Then
                 iMk = 0
                 Exit For
             End If

Mit freundlichen Grüßen
Günter

Ach so: LinuxMint 15 Kernel 3.8.0-19 LO 4.1.0.4 Build ID:410m0(Build:4)

  iMk = 1
     Url = "private:factory/scalc"
     Desktop = CreateUnoService("com.su.star.frame.Desktop")
     oTabDok = ThisComponent
     oBlatt = oTabDok.getCurrentController().getActiveSheet()
     oBlatt = oTabDok.getCurrentController().ActiveSheet
     sZchn = "123456789"
     For iJ = 4 To 12
         For iI = 24 To 32
             oZelle = oBlatt.getCellByPosition(iI,iJ)
             sTmp = oZelle.String
             iErg = inStr(sZchn,sTmp)
             If iErg = 0 OR sTmp = "" Then
                 iMk = 0
                 Exit For
             End If
         Next iI
         If iMk = 0 Then
             Exit For
         End If
     Next iJ
     If iMk = 1 Then

Hallo zusammen.
Ich habe eine quadratische Tabelle, bei der in jeder Zelle eine Ziffer
stehen soll. Dies will ich prüfen. Jeder Zelleninhalt wird mit

              oZelle = oBlatt.getCellByPosition(iI,iJ)
             sTmp = oZelle.String
gelesen und mit

             iErg = inStr(sZchn,sTmp)
             If iErg = 0 Then
auf Ziffer geprüft. Dies funktioniert gut, wenn der zu untersuchende
Zelleninhalt ein unzulässiges Zeichen ist, das Ergebnis ist 0. Aber
wehe, wenn in der zu untersuchenden Zelle garnicts ist, also "". Dann
steht in iErg eine 1,??? und in sTmp ein "".

Daß sTmp ein Leerstring ist, wenn die Quelle aka der Zellinhalt leer
ist, bedarf wohl keiner weiteren Erklärung, oder? Aber was suchst Du mit
der inStr-Funktion in dem Fall genau? Du suchst, ob in dem zu
durchsuchenden Text (SZchn) ein Leerstring enthalten ist. Und das ist
zwischen jedem einzelnen Zeichen in diesem Text unendlich mal der Fall.
Daher bekommst du als Ergebnis ein TRUE.

Übrigens begehst Du noch einen anderen Denkfehler; wenn nämlich die
Variable sZchn aus z. B. der Zeichenfolge "0123456789" besteht, dann
findet die Funktion auch Werte wie 12, 23, 34 usw. Du solltest also auf
alle Fälle überprüfen, ob die Länge des Zellinhaltes genau 1 ist (und
dann hast Du auch bei einem Leerstring keine Probleme).

Ich würde das folgendermaßen lösen:

If Len(sTmp) = 1 Then
   iErg = inStr(sZchn,sTmp)
Else
   iErg = 0
Endif
If iErg = 0 Then

Aber warum verhinderst Du nicht einfach von vorn herein, daß da
überhaupt etwas anderes als genau eine Ziffer eingetragen werden kann?

Spalte oder Bereich markieren => Daten => Gültigkeit => Kriterien =>
Zulassen: 'Ganze Zahl' / [X] Leerzeichen zulassen => Daten: 'zwischen'
=> Min: '1' / Max: '0' => Fehlermeldung => [X] Fehlermeldung anzeigen /
Meldungstext: 'Nur ganze Zahlen zwischen 1 und 9 erlaubt' o. ä.

Wolfgang

Hallo!
Vielen Dank.

If Len(sTmp) = 1 Then

Das ist meine Lösung

MfG
Günter