Excel - Eingabe überprüfen

  • #1
N

neojade

Guest
Hallo,

ich möchte in Excel die Eingabe des Benutzers in eine Zelle überprüfen, eigentlich würde das mit Worksheet_Change einfach gehen. Das Problem ist nun das die Eingabe gleichzeitig noch geändert wird (Leerzeichen und Bindestriche entfernt), dadurch bekomme ich natürlich eine Endlosschleife. Worksheet_SelectionChange geht auch nicht da sonst bei jedem Klick in eine Zelle eine Fehlermeldung aufploppt wenn die Eingabe falsch ist (also msgbox von mir).

Gibt es noch eine andere Möglichkeit dafür oder kann ich irgendwie festlegen das das Makro nur einmal ausgeführt wird bei einer änderung an der Zelle (ein seperater Makro Button geht leider auch nicht, da zu kompliziert für die Anwender)?

Vielen Dank schonmal.
 
  • #2
Hallo neojade,

vielleicht kann man das mit einer Textbox lösen, die über die Zelle gelegt wird.

a) TextBox1 über der Zelle anlegen
b) TextBox1 markieren, rechte Maustaste -> Steuerelement formatieren-> Reiter->Eigenschaften' ->->von Zellposition und -größe abhängig' setzen
c) folgendes Makro in die Code-Seite der Tabelle einfügen
(bei <<<Weiter Prüfungen>>> weiter Prüfungen einbauen)
Tabellenlasche markieren, rechte Maustaste->Code anzeigen
in das sich öffnende Fenster folgenden Code per Copy/Paste einfügen:
Code:
Option Explicit
Private Sub TextBox1_LostFocus()
  Dim sTxt As String, pos As Long, x As Long
  Dim ZeichenEntfernen As Variant
  
 ->Inhalt der Zelle hinter der Textbox löschen
  Me.TextBox1.TopLeftCell = 
    
  sTxt = Me.TextBox1.Text
 ->Prüfen, ob Textbox Text ethält
  If sTxt =  Then Exit Sub
  
 ->Nicht gewollte Zeichen aus Text entfernen
  ZeichenEntfernen = Array( , -)
  For x = LBound(ZeichenEntfernen) To UBound(ZeichenEntfernen)
    pos = InStr(1, sTxt, ZeichenEntfernen(x))
    Do While pos > 0
      sTxt = Left(sTxt, pos - 1) & Right(sTxt, Len(sTxt) - pos)
      pos = InStr(1, sTxt, ZeichenEntfernen(x))
    Loop
  Next
  
 ->Prüfen, ob Text noch Zeichen enthält
  If sTxt =  Then
    MsgBox Bitte etwas vernünftiges eingeben.
    Me.TextBox1.Activate
    Exit Sub
  End If
  
 -><<<Weiter Prüfungen>>>
  bok = True->Kennzeichen: alles ok
  
  If Not bok Then
    MsgBox _
      Die Eingabe enthält Fehler. & vbLf _
      & Bitte korrigieren Sie die Eingabe.
    Me.TextBox1.Activate
  Else
   ->übrigen Text in Zelle speichern
    Me.TextBox1.TopLeftCell = sTxt
  End If
End Sub

Das makro wird aktiv, wenn die textbox verlassen wird.

Die Wirkung des Makros:
a) holt sich den Text aus der Textbox
b) entfernt Leerzeichen und Bindestriche
c) prüft diesen Text ( selber noch dazubauen)
d) speichert diesen Text in der Zelle hinter der Textbox

Ist der Text fehlerbehaftet, gibt das Makro eine Fehlermeldung aus und setzt den focus wieder auf die Textbox.

Gruß Matjes :) 
 
  • #3
Vielen Dank für die schnelle Antwort :) .

Hab meinen Code mit deinem zusammengemischt und hier das fertige Ergebnis falls mal jemand was ähnliches braucht.

Code:
Private Sub TextBox1_LostFocus()
 If TextBox1.Text =  Then Exit Sub
->Eingabe überprüfen ob Buchstaben oder sonstiges vorhanden ist
 If TextBox1.Text Like *[0-9-] Then
 ->Leerzeichen und Striche entfernen
  TextBox1.Text = Replace(TextBox1.Text,  , )
  TextBox1.Text = Replace(TextBox1.Text, -, )
 ->Länge überprüfen
  If Len(TextBox1.Text) > 20 Then MsgBox Nummer hat mehr als 20 Stellen, Eingabe bitte pruefen
  If Len(TextBox1.Text) < 20 Then MsgBox Nummer hat weniger als 20 Stellen, Eingabe bitte pruefen
 ->Format festlegen
  TextBox1.Text = Format(TextBox1.Text, ####-####-##-### ### ####)
 Else
  MsgBox Nur Zahlen, Bindestrich und Leerzeichen als Eingabe erlaubt
  TextBox1.Activate
 End If
End Sub
 
Thema:

Excel - Eingabe überprüfen

ANGEBOTE & SPONSOREN

Statistik des Forums

Themen
113.839
Beiträge
707.962
Mitglieder
51.492
Neuestes Mitglied
Janus36
Oben