Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema Userform
BildScreenshot zu Userform Userform-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema TextBox
BildScreenshot zu TextBox TextBox-Seite mit Beispielarbeitsmappe aufrufen

Sverweis in VBA Userform

Betrifft: Sverweis in VBA Userform von: Excelaner
Geschrieben am: 06.11.2020 16:17:30

Hi liebes Forum,


habe ein Userform erstellt, das eigentlich korrekt funktioniert.


Man kann entweder eine Mitglieds Nr. (txtMitglied) eintragen oder bei Nichtmitgliedern trägt man den Namen (txtName) und Vornamen (txtVorname) ein.


Jetzt möchte ich, dass wenn man eine Mitglieds Nr. einträgt, in den Textboxen txtName und txtVorname über SVerweis die korrekten Daten automatisch angezeigt werden, damit man gleich sieht, ob man die richtige Nummer eingetragen hat, und nicht erst nachdem speichern. Die Daten für die Mitglieder sind im Worksheet "Mitglieder" gespeichert.


Dafür habe ich folgendes geschrieben:

Private Sub txtMitglied_AfterUpdate()

Me.txtName.Value = WorksheetFunction.VLookup(Me.txtMitglied.Value, Worksheets("Mitglieder"). _
Range("A2:C2300"), 3, False)

End Sub


Folgender Fehler kommt dann:


Laufzeitfehler '1004':


Die VLookup-Eigentschaft des WorksheeFunction-Objektes kann nicht zugeordnet werden.



Was mache ich falsch?


Danke euch für eure Hilfe!

Betrifft: AW: Sverweis in VBA Userform
von: Daniel
Geschrieben am: 06.11.2020 16:25:43

HI

eine mögliche Fehlerursachen wäre, dass der text aus der Spalte txtMitglied nicht in der Spalte A des Worksheets vorhanden ist.

das kann daran liegen, dass in TextBoxen immer Text steht und die Mitgliedsnummer in der Liste als Zahl eingetragen ist. Das ist für den SVerweis/LookUp ein unterschied.

ggf probiers mal so, das Cstr mit Application.VLookUP vermeidet den Abbruch des codes, das VAL wandelt den Text in eine Zahl, so dass der VLoopUp suchen kann:

Me.txtName.Value = CStr(Application.VLookup(Val(Me.txtMitglied.Value), Worksheets("Mitglieder"). _
Range("A2:C2300"), 3, False))

Gruß Daniel

Betrifft: AW: Sverweis in VBA Userform
von: Excelaner
Geschrieben am: 06.11.2020 16:49:06

vielen lieben Dank! Das hat funktionier!! Danke dir!!

Gibt es jetzt irgendwie die Möglichkeit, dass wenn man eine MitgliedsNr einträgt und der Nachname hat sich z.B. geändert und ich überschreibe dieses Feld (txtName) manuell, dass diese dann in der Mitgliederliste auch automatisch korrigiert wird?

Betrifft: AW: Sverweis in VBA Userform
von: Daniel
Geschrieben am: 06.11.2020 17:03:03

Hi

dazu müsstest du die Zeilennummer der Fundstelle mit .FiND oder Application.Match (entspricht VERGLEICH) und dann nicht den Namen in die TextBox schreiben, sondern die TextBox mit Zelle in der gefundenen Zeile verknüpfen, die den Namen enthält.

das Verknüpfen macht man, in dem man die Zelladresse der Zelle in die Eigenschaft ControlSource einträgt (am besten mit Tabellenblatt davor in der Form: 'Tabelle1!A1')

dann sind TextBox und Zelle verbunden, dh der Zellinhalt wird in der TextBox angezeigt und jede Änderung wird aus der Box in die Zelle übertragen sobald du die Box verlässt.
Programmieren musst du dann nichts.

Gruß Daniel

Betrifft: AW: Sverweis in VBA Userform
von: Excelaner
Geschrieben am: 06.11.2020 17:25:08

Oookay krass :)

Hast du mir hierfür vielleicht den Code, wie es aussehen müsste? Bin dann doch nicht so weit, leider :(

Betrifft: AW: Sverweis in VBA Userform
von: Daniel
Geschrieben am: 06.11.2020 17:57:22

HI

in etwa so (bitte nicht kopieren sondern lesen, verstehen, selber schreiben):
dim x as variant
x = Application.Match(val(textboxMitglied), Sheets("TabelleX").Range("A:A"), 0)
if vartype(x) <> vberror then 
    TextboxName.ControlSource = "'TabelleX'!B" & x
else
    TextboxName.ControlSource = ""
end if
Gruß Daniel

Betrifft: AW: Sverweis in VBA Userform
von: Excelaner
Geschrieben am: 08.11.2020 07:36:44

Hi Daniel,

komisch, mein letzter Eintrag wurde nicht veröffentlicht. Der Code funktioniert perfekt, VIELEN DANK!!!!

Hab aber ein Problem mit dem leeren des Boxes. Normalerweise leere ich die Eingabefelder nach dem Speichern mit

Me.txtName.Value = ""

wenn ich das jedoch hier mache, dann löscht es den Eintrag "Name" in dem Sheet Mitglieder, was ja logisch ist, da wir die Verknüpfung geschaffen haben. Das heißt, nach dem Speichern ist der Name der vorherigen MitgliederNr so lange drin, bis ich eine neue Nr. eingetragen habe.

Ist zwar jetzt kein Weltuntergang, aber auch nicht wirklich schön. Gibt es dafür auch eine Lösung, ich habs leider nicht hinbekommen. Also mir gehts nur darum, dass nach dem Speichern alle Textboxen wieder geleert werden.

Und noch was, manchmal nutze ich meinen Surface im Touchmodus, ich krieg es zwar hin, dass sich die uralte Bildschirmtastatur :) von Microsoft öffnet sobald ich auf ein Textbox klicke, aber nicht die Surface Touchtastatur, die sich auch sonst immer öffnet, wenn man etwas eingeben möchte.

Gibt es dafür auch Abhilfe?

Danke dir im Voraus :)

Betrifft: AW: Sverweis in VBA Userform
von: Daniel
Geschrieben am: 08.11.2020 11:40:54

Hi

Lösche im gezeigten Code nicht nur due Verbindung zur Zelle, sondern danach auch den Inhalt der Textbox.

Lösche beim Leeren zuerst due Box mit der Mitgliedsnummer.

Gruß Daniel

Betrifft: AW: Sverweis in VBA Userform
von: Excelaner
Geschrieben am: 11.11.2020 23:48:28

Danke Daniel für deine Hilfe!

Betrifft: AW: Sverweis in VBA Userform
von: Hajo_Zi
Geschrieben am: 12.11.2020 05:31:25

offen bedeutet es soll noch eine Antwort kommen.
Warum ist dein Beitrag Offen.
Du willst doch was machen. Soll jemand vorbei kommen?

Das ist nur meine Meinung zu dem Thema.

GrußformelHomepage

Beiträge aus dem Excel-Forum zum Thema "Sverweis in VBA Userform"