Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Datenüberprüfung 2 Spalten
#1
Hallo liebe Leute,

ich versuche mich nun auch an VBA und habe gleich eine schwierige Frage.

Bei meinem Projekt gebe ich in Spalte "A" den Vornamen und in Spalte "B" den Nachnamen ein. Die Eingabe erfolgt über das (?) Userform und soll später noch erweitert werden.

Ich möchte nun, dass der Name + dazugehörenden Vornamen nicht doppelt in der Tabelle aufgenommen werden kann. Die entsprechende Person soll nur einmal in der Tabelle eingetragen werden .

Es kann zwar Max und Moritz Mustermann geben aber keine zwei Martina's Mustermann ...

Nun habe ich diverse Foren, Hilfen, Videotutorials  durchgeschaut und werde immer ahnungsloser und ratloser.


Kann mir da jemand von Euch helfen ? Die TestMappe habe ich mit hochgeladen:


.xlsm   Mappe1.xlsm (Größe: 23,55 KB / Downloads: 2)


Vielen Dank für Eure Mühen mit mir. :20:


BazzSor
Antworten Top
#2
Hallo,

so:

Code:
Private Sub Command_Übernahme_Click()
Dim last As Long, raFund As Range

last = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row + 1

If TextBox_Vorname.Value = "" Then
   MsgBox "Bitte Vornamen eingeben", vbExclamation, "Achtung!"
   TextBox_Vorname.SetFocus
ElseIf Right(TextBox_Vorname.Text, 1) = Chr(32) Then
   MsgBox "Keine Leerzeichen erlaubt", vbCritical, "Wichtig!"
   TextBox_Vorname.SetFocus
ElseIf TextBox_Nachname.Value = "" Then
   MsgBox "Bitte Nachnamen eingeben", vbExclamation, "Achtung!"
   TextBox_Nachname.SetFocus
ElseIf Right(TextBox_Nachname.Text, 1) = Chr(32) Then
   MsgBox "Keine Leerzeichen erlaubt", vbCritical, "Wichtig!"
   TextBox_Nachname.SetFocus
Else
   Set raFund = Columns(1).Find(what:=Me.TextBox_Vorname, LookIn:=xlValues, lookat:=xlWhole)
   If Not raFund Is Nothing Then
       If raFund.Offset(, 1) = Me.TextBox_Nachname Then
           MsgBox "Nicht zulässig, " & Me.TextBox_Vorname & " " & Me.TextBox_Nachname _
           & " ist bereits vorhanden."
           Me.TextBox_Nachname = ""
           Me.TextBox_Vorname = ""
           Me.TextBox_Vorname.SetFocus
           Set raFund = Nothing
           Exit Sub
       End If
   End If
   ActiveSheet.Cells(last, 1).Value = TextBox_Vorname.Value
   ActiveSheet.Cells(last, 2).Value = TextBox_Nachname.Value
   Unload UserForm1
End If

Set raFund = Nothing


Gruß Werner
[-] Folgende(r) 1 Nutzer sagt Danke an Werner.M für diesen Beitrag:
  • BazzSor
Antworten Top
#3
ahhh, danke Dir.

Das heisst es wird erst nach dem Vornamen gesucht und dann erst nach dem Nachnamen.

Über ".find" bin ich schon gestolpert, ".offset" ist mir (hust) noch unbekannt.

Werde mir das jetzt Schritt für Schritt anschauen und lernen.


Danke :19:
Antworten Top
#4
Hallo,

mit Offset gibst du einen Zeilenversatz an.
Den Versatz kannst du angeben für die Zeile und die Spalte.
Der erste Zahlenwert in der Klammer gibt den Zeilenversatz an, der zweite Wert den Spaltenversatz.
Positive Werte bei Zeile = Versatz nach unten, negative Werte = Versatz nach oben
Positive Werte bei Spalte = Versatz nach rechts, negative Werte = Versatz nach links

raFund.Offset(1, 0) = ausgehend von der Fundzelle eine Zeile unterhalb
raFund.Offset(-1, 0) = ausgehend von der Fundzelle eine Zeile oberhalb
raFund.Offset(0, 1) = ausgehend von der Fundzelle eine Spalte rechts
raFund.Offset(0, -1) = ausgehend von der Fundzelle eine Spalte nach links

Das lässt sich natürlich auch kombinieren:

raFund.Offset(1, 1) = ausgehend von der Fundzelle eine Zeile unterhalb und eine Spalte nach rechts

Gruß Werner
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste