Clever-Excel-Forum

Normale Version: Inhalt einer Userform-TextBox in Spalte vorhanden?
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Hi,

ich will prüfen, ob der eingegebene Inhalt einer Userform in der Spalte A vorhanden ist. Wenn ja, dann Neueingabe, wenn Nein, dann Übernahme in Variable.
Geht das so? Bei Text hat es funktioniert, eine doppelte Zahl wurde trotzdem akzeptiert.
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)                           ' Kunde: KdNr 
 
  If TextBox1.Value = "" Then Exit Sub
 
  Set objWsK = ThisWorkbook.Worksheets("Kundendaten")
  loLetzte = objWsK.Cells(Rows.Count, 1).End(xlUp).Row                   ' letzte belegte in Spalte A (1)
  For i = 2 To loLetzte
     If TextBox1.Value = Range("A" & i) Then                             ' gibt es die KdNr schon in Spalte A?
        frm_KdNr_vorhanden.Show                                          ' Fehlermeldung
        TextBox1.Value = ""                                              ' TextBox leeren
        TextBox1.SetFocus                                                ' Cursor in TextBox 1 zur Neueingabe
        Cancel = True
        Exit Sub
     Else
        strKdNr = TextBox1.Value                                         ' Übertrag Eingabe in Variable
     End If
  Next i
End Sub
Hallo Rabe,

umgeprüft und deshalb nur als Anregung zu verstehen:

Ersetze
= range("A"&i)

Durch
= objwsk.cells(i , "A")

Mfg
Moin Ralf!
Ungetestet müsstest Du zunächst den Typ prüfen.
Nach dem Motto:
If IsNumeric(TextBox1) Then Variable = CDbl(TextBox1)

Gruß Ralf
Im Übrigen:
Warum nimmst Du nicht die Range.Find-Methode?
Ist jedenfalls schneller als Deine Schleife.

(Ich schaue erst heute Abend wieder rein)

Gruß Ralf
Hallo Ralf(Rabe)

warum überhaupt eine TextBox?
Wenn du gleich eine Combobox nimmst in welcher die Einträge der Kundendaten (Nummern) sind, sparst du Dir ohnehin die Abfrage ob es diesen Wert gibt?
lg
Chris
Hi,

(16.03.2016, 09:11)Fennek schrieb: [ -> ]Durch
= objwsk.cells(i , "A")

danke, werde ich testen.
Hi,

hmm,

meinst du so etwas?
Code:
Option Explicit
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
 Dim lngKdNr As Long
 Dim objWsK As Worksheet
 Set objWsK = ThisWorkbook.Worksheets("Kundendaten")
 If TextBox1.Value <> "" Then
     If IsNumeric(Me.TextBox1.Text) Then
        If WorksheetFunction.CountIf(objWsK.Columns(1), CLng(TextBox1.Value)) = 0 Then
           lngKdNr = CLng(TextBox1.Value)
           MsgBox lngKdNr & " ist nicht vorhanden und wird der Variablen zugewiesen"
        Else
           frm_KdNr_vorhanden.Show
           TextBox1.Value = ""
           TextBox1.SetFocus
           Cancel = True
        End If
     End If
  End If
End Sub

die Msgbox kann dann natürlich raus!

oder
Code:
Option Explicit
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
 Dim lngKdNr As Long
 Dim objWsK As Worksheet
 Set objWsK = ThisWorkbook.Worksheets("Kundendaten")
 If TextBox1.Value <> "" Then
     If IsNumeric(Me.TextBox1.Text) Then
        If WorksheetFunction.CountIf(objWsK.Columns(1), CLng(TextBox1.Value)) = 0 Then
           lngKdNr = CLng(TextBox1.Value)
           MsgBox lngKdNr & " ist nicht vorhanden und wird der Variablen zugewiesen"
        Else
            ErrM
            Cancel = True
        End If
     Else
        ErrM
        Cancel = True
     End If
  End If
End Sub
Sub ErrM()
TextBox1.Value = ""
frm_KdNr_vorhanden.Show
End Sub
Hi,

(16.03.2016, 09:13)RPP63 schrieb: [ -> ]Warum nimmst Du nicht die Range.Find-Methode?

ich habe es jetzt mal so probiert und das geht auch:
   With objWsK.Range("A2:A" & loLetzte)
      Set c = .Find(TextBox1.Value, LookIn:=xlValues)
      If Not c Is Nothing Then
         firstAddress = c.Address
         Do
            frm_KdNr_vorhanden.Show                                          ' Fehlermeldung 
            TextBox1.Value = ""                                              ' TextBox leeren 
            TextBox1.SetFocus                                                ' Cursor in TextBox 1 zur Neueingabe 
            Cancel = True
            Exit Sub
         Loop While Not c Is Nothing And c.Address <> firstAddress
      Else
         strKdNr = TextBox1.Value                                            ' Übertrag Eingabe in Variable 
      End If
   End With

Wenn das dadurch schneller wird, gefällt mir das.
Was würde es bringen, Range durch Cells zu ersetzen?
Hi Chris,

ich meinte es so:
Es soll alles eingegeben werden können, egal ob Text oder Zahlen, es darf keine doppelten Werte geben.

Das CountIf gefällt mir gut, wenn ich die numerische Abfrage und die Umwandlung rausnehme, dann müßte das doch passen.

Jetzt sieht es so aus:
   If TextBox1.Value <> "" Then
      If WorksheetFunction.CountIf(objWsK.Columns(1), TextBox1.Value) = 0 Then  ' gibt es die KdNr schon in Spalte A? 
         strKdNr = TextBox1.Value
'         MsgBox strKdNr & " ist nicht vorhanden und wird der Variablen zugewiesen" 
      Else
         frm_KdNr_vorhanden.Show                                          ' Fehlermeldung 
         TextBox1.Value = ""                                              ' TextBox leeren 
         TextBox1.SetFocus                                                ' Cursor in TextBox 1 zur Neueingabe 
         Cancel = True
'         Exit Sub 
      End If
   End If

Aber das mit der ComboBox teste ich auch mal, das wäre doch noch einfacher?
Hi,

da du unterschiedliche Einträge suchst wäre die Combo falsch, das hatte ich überlesen.

Zitat:Es soll alles eingegeben werden können, egal ob Text oder Zahlen, es darf keine doppelten Werte geben.

dann müsste es so passen.

Code:
Option Explicit
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
 Dim varKdNr As Variant
 Dim objWsK As Worksheet
 Set objWsK = ThisWorkbook.Worksheets("Kundendaten")
 If TextBox1.Value <> "" Then
        If WorksheetFunction.CountIf(objWsK.Columns(1), TextBox1.Value) = 0 Then
           varKdNr = TextBox1.Value
           MsgBox varKdNr & " ist nicht vorhanden und wird der Variablen zugewiesen"
        Else
        TextBox1.Value = ""
        frm_KdNr_vorhanden.Show
        cancel=true
        End If
  End If
End Sub

lg
Chris
Seiten: 1 2