Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1760to1764
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

DataBodyRange als Range

DataBodyRange als Range
19.05.2020 09:13:59
Sandro
Liebes Forum
Ich möchte verschiedene ComboBoxen in meiner Userform über VLookup befüllen. Dazu möchte ich eine Tabelle "Infoblatt_Tabelle" auf dem Tabellenblatt "Infoblatt" mittels ListObjects("Infoblatt_Tabelle").DataBodyRange als Range für den Suchbereich definieren.
Dazu habe ich folgenden Code:

Private Sub TextBox28_AfterUpdate()
Dim Range_Infoblatt As Range
Set wbMappe = Application.ActiveWorkbook
Set wsBlattZiel = wbMappe.Worksheets("Infoblatt")
Set Range_Infoblatt = wsBlattZiel.ListObjects("Infoblatt_Tabelle").DataBodyRange
Me.ComboBox4 = Application.WorksheetFunction.VLookup(Val(TextBox28), Worksheets("Infoblatt"). _
Range("Range_Infoblatt"), 2, True)
Me.ComboBox5 = Application.WorksheetFunction.VLookup(Val(TextBox28), Worksheets("Infoblatt"). _
Range("Range_Infoblatt"), 3, True)
End Sub

Leider bekomme ich immer den Fehler "Anwendungs- oder objektdefinierter Fehler"
Ich hoffe hier kann mir jemand weiterhelfen.
Grüsse
Sandro

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: DataBodyRange als Range
19.05.2020 09:30:38
Daniel
Hi
1. solltst du, wenn du einen Fehler in einem Code hast und um Hilfe bittest, immer dazu sagen in welcher Programmzeile dieser Fehler auftritt. Excel zeigt DIR das an, und für uns erleichtert das die Arbeit, weil wir dann nicht den ganzen Code durchschauen müssen, sondern gleich in der Fehlerverursachenden Zeile mit der Suche beginnen können.
Aber wir sind keine Hellseher, auch wenn viele Fragesteller das immer wieder annehmen.
2. wenn man eine Range-Variable erstmal zugewiesen hat, dann kann man in der Folge diese Range-Variable direkt ohne jegliche Vorsätze (Worksheet, Tabellenblatt) verwenden, weil das in der Range-Varible schon drin steckt:
Me.ComboBox4 = Application.WorksheetFunction.VLookup(Val(TextBox28), Range_Infoblatt, 2, True)
so wie du das programmiert hast, müsste "Range_Infoblatt" ein definierter Name auf dem Tabellenblatt sein.
da du eine "intelligente Tabelle" hast, hast du diesen Namen ja auch. dh ohne die Variable könntest du den Zellbereich auch so ansprechen:
Me.ComboBox4 = Application.WorksheetFunction.VLookup(Val(TextBox28), Worksheets("Infoblatt"). _
Range("Infoblatt_Tabelle"), 2, True)
Gruß Daniel
Gruß Daniel
Gruß Daniel
Anzeige
AW: DataBodyRange als Range
19.05.2020 09:46:41
Sandro
Hallo Daniel
Danke für den Hinweis, werde dies bei künftigen Beiträgen gerne beachten.
Wenn ich dich richtig verstanden habe, sollte mein Code so funktionieren:
Private Sub TextBox28_AfterUpdate()
Me.ComboBox4 = Application.WorksheetFunction.VLookup(Val(TextBox28), Worksheets("Infoblatt"). _
Range("Infoblatt_Tabelle"), 2, True)
End Sub
Wie du richtig erkannt hast, habe ich die Tabelle mit den Daten "Infoblatt_Tabelle" genannt.
Leider erhalte ich nun in der Me.Combobox4 Spalte folgende Fehlermeldung:
"Die VLookup-Eigenschaft des WorksheetFuncion-Objektes kann nicht zugeordnet werden."
Als Ergänzung, die Suchbegriffe sehen so aus "D1231234" "D1234568". Also immer ein Buchstabe gefolgt von 7 Zahlen.
Vielleicht kommen wir nun zu einer Lösung.
Grüsse
Sandro
Anzeige
AW: DataBodyRange als Range
19.05.2020 09:58:26
Daniel
Hi
wenn du mit der SVerweis-Option 4. Parameter = True suchst, dann musst du folgendes beachten:
1. der verwendete Zellbereich des 2. Paramteters muss aufsteigend sortiert sein
2. wird der gesuchte Wert nicht gefunden, so wird der nächstkleinere Wert aus der List als Ergebnis verwendet.
der von dir genannte Fehler kann daher nur auftreten wenn der gesuchte Begriff kleiner ist als der erste Wert in der Liste, oder wenn die Liste unsortiert ist. Verwendet man TRUE in unsortierten Listen, kann man zwar ein Ergebnis bekommen, aber das ist Blödsinn (und manchmal auch der Fehler)
wenn deine Listen nicht sortiert sind, musst du den 4. Parameter auf FALSE setzen.
dann bekommst du aber immer einen Fehler, wenn der Suchbegriff nicht vorhanden ist.
um diesen Fehler zu vermeiden, musst du prüfen, ob der Wert überhaupt in der Liste drin ist:
If Worksheetfunction.CountIf(Worksheets("Infoblatt").Range("Infoblatt_Tabelle"), Val(TextBox28)) _
> 0 Then
me.Comobobox4 = Application.WorksheetFunction.VLookup(Val(TextBox28), Worksheets("Infoblatt" _
). _
Range("Infoblatt_Tabelle"), 2, False)
end if
kommen wir jetzt aber zu deinem eigentlichen Fehler und das ist, wie mein alter Lehrer zu sagen pflege, "ein dicker Hund":
schau dir mal in der Hilfe an, was die Funktion VAL macht und vergleiche das mit deinen Suchbegriffen "D1231234".
Fällt dir irgendwas auf?
Gruß Daniel
Anzeige
AW: DataBodyRange als Range
19.05.2020 10:20:26
Sandro
Hallo Daniel
Perfekt, jetzt hat's "Klick" gemacht!Code angepasst und nun funktioniert er.
Danke für deine Hilfe.
Grüsse
Sandro
Private Sub TextBox28_AfterUpdate()
Me.ComboBox4 = Application.WorksheetFunction.VLookup(CVar(TextBox28), Worksheets("Infoblatt"). _
Range("Infoblatt_Tabelle"), 2, False)
End Sub

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige