Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1968to1972
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

Combobox in Userform befüllen

Combobox in Userform befüllen
17.03.2024 09:31:20
Schlumpf33
Hallo,
Ich will eine Combobox mit Werten aus einer intelligenten Tabelle befüllen. Diese Tabelle befindet sich im Tabellenblatt "Tabelle2" ("Verweise").
Der Code lautet:

Private Sub UserForm_Initialize()
' Comboboxen befüllen
Cb_Anrede.RowSource = Tabelle2.Range("tblAnrede").Address

Leider wird die Combobox mit den Werten aus Tabelle1 befüllt und nicht aus Tabelle2. Ich kann keinen erkennen, warum er nicht den Bereich aus Tabelle2 nimmt. Den Zellbereich (A2:A4) übernimmt er ja richtig, aber nicht aus Tabelle2.

Bitte um Hilfe
Franz

31
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Combobox in Userform befüllen
17.03.2024 10:38:58
ralf_b
du benutzt den code- name und nicht den Worksheet(namen)
schau dir die Bezeichnung der Blätter im Projektfenster des VBA-Editors an
AW: Combobox in Userform befüllen
17.03.2024 11:11:06
Schlumpf33
Danke für die schnelle Antwort!

So sieht es im Projekt aus:
Tabelle1 (Tabelle1)

Ich habe schon alle Schreibweisen getestet, wie
Cb_Anrede.RowSource = Verweise.Range("tblAnrede").Address ' Variable nicht definiert !
Cb_Anrede.RowSource = Verweise!Range("tblAnrede").Address ' Variable nicht definiert !
Cb_Anrede.RowSource = Tabelle!Range("tblAnrede").Address ' Laufzeitfehler '438'

Sceenshot unter Sceenshot unter Userbild

Ich steh an und weiß nicht mehr weiter.

LG
Franz
Anzeige
AW: Combobox in Userform befüllen
17.03.2024 12:13:48
ralf_b
Oh, schon viele Antworter zu Gange.

der Name des Blattes muß mit in die Adresse. das kommt bei Worksheets(""xyz").Range ("A1").Address aber nicht mit.
das steht dann nur "$A$1"
wenn du auf Rowsource verzichten würdest, hättest du weniger Probleme damit. Die Alternative wäre .List()
Rowsource= "Verweise!" & tbl.databodyrange.Address wäre noch eine Idee(ungetestet).

ansonsten zeig mal die Datei ohne pers. Daten.
AW: Combobox in Userform befüllen
17.03.2024 10:39:52
hary
Moin
Passt es so?
Cb_Anrede.RowSource = Worksheets("Tabelle2").Range("tblAnrede").Address

gruss hary
Anzeige
AW: Combobox in Userform befüllen
17.03.2024 10:46:42
Alwin Weisangler
Hallo,

nutzte das Listobject:


Cb_Anrede.RowSource = Tabelle2.ListObjects("tblAnrede").DataBodyRange.Address

Gruß Uwe
AW: Combobox in Userform befüllen
17.03.2024 11:19:22
Schlumpf33
Auch mit DatabodyRage übernimmt er die Werte aus Tabelle1

Gruß
Franz
AW: Combobox in Userform befüllen
17.03.2024 11:49:16
Alwin Weisangler
Hallo Franz,
dann stimmt etwas mit dem Verweis nicht. Das direkte Ansprechen des Listobjects ist grundsätzlich richtig.
Was ich vermute ist, dass dein Listobject mehrspaltig ist. Dann wäre der Weg um eine Spalte gezielt zu laden beispielhaft so:


Cb_Anrede.RowSource = Tabelle2.ListObjects("tblAnrede").DataBodyRange.Columns(2).Address


Gruß Uwe
Anzeige
AW: Combobox in Userform befüllen
17.03.2024 11:16:21
Schlumpf33
Leider Nein!

mit
Cb_Anrede.RowSource = Worksheets("Tabelle2").Range("tblAnrede").Address
Da kommt ein Laufzeitfehler '9':
Index außerhalb des gültigen Bereichs

mit
Cb_Anrede.RowSource = Worksheets("Verweise").Range("tblAnrede").Address
nimmt er wieder die Werte aus Tabelle1

Gruß
Franz
AW: Combobox in Userform befüllen
17.03.2024 11:24:38
RPP63
Zeig doch mal bitte die Datei.
AW: Combobox in Userform befüllen
17.03.2024 12:24:35
Schlumpf33
An alle Helferleins!

Uff! Jetzt wird's spannend.

Ich habe mal eine Testdatei gemacht, nur mit einem Combofeld und einer Tabelle für die Füllung. Alles mit den gleichen Namen.

In diesem Test funktioniert alles einwandfrei mit meiner ursprünglichen Syntax.

Keine Ahnung warum es in meinem Projekt nicht funktioniert. Vermutlich ein simpler Anfängerfehler:-(
Ich versuche jetzt mal das Projekt so weit zu reduzieren bis der Fehler nicht mehr auftritt.

Sollte ich nicht zum Erfolg komme, darf ich euch nochmals kontaktieren.
Wenn ich den Fehler finde, informiere ich euch davon.

Gruß
Franz
Anzeige
AW: Combobox in Userform befüllen
17.03.2024 12:52:36
Schlumpf33
Liebe Helferleins!
Ich habe jetzt mein Projekt auch ein absolutes Minimum reduziert und der Fehler ist noch immer vorhanden.

Hier meine reduzierte Datei: https://www.herber.de/bbs/user/168072.xlsm

Es geht um das Feld Anrede, das ich mit der Tabelle tblAnrede aus Tabelle 2 füllen will. Leider füllt er es aber mit den Zellen aus Tabelle 1.

Wo liegt mein Fehler?

Gruß Franz


AW: Combobox in Userform befüllen
17.03.2024 13:00:56
Alwin Weisangler
deine Datei anbei.
Das Listobject lässt sich via Intellisense vom Editor normal zuweisen und macht was man erwartet.
https://www.herber.de/bbs/user/168076.xlsm

Gruß Uwe
Anzeige
AW: Combobox in Userform befüllen
17.03.2024 19:28:26
Oppawinni
vielleicht sowas:

Cb_Anrede.RowSource = Range("tblAnrede[Anrede]").Worksheet.Name & "!" & Range("tblAnrede[Anrede]").Address

oder:

Cb_Anrede.RowSource = "Verweise!" & Range("tblAnrede[Anrede]").Address

so einfach kann es nicht sein, oder?
War das gelöst? (owT)
18.03.2024 12:31:25
Oppawinni
Ne Menge Posts für das Thema und plötzlich Schweigen, oder hab ich was verpasst?
AW: War das gelöst? (owT)
18.03.2024 19:28:15
Schlumpf33
Das plötzliche Schweigen war bedingt durch durch einen Kurzurlaub mit Offline.
Das beantwortet die Frage nun aber nicht (owT)
18.03.2024 20:38:08
Oppawinni
?
und trotzdem fehlt der Blattname
17.03.2024 13:53:18
ralf_b
Cb_Anrede.RowSource = "Verweise!" & tbl.DataBodyRange.Address
AW: und trotzdem fehlt der Blattname
17.03.2024 14:01:21
Schlumpf33
Wenn ich genau deine Syntax verwende bekomme ich "Fehler beim Kompilieren: Variable nicht definiert!"
Cb_Anrede.RowSource = "Verweise!" & tbl.DataBodyRange.Address
Anzeige
AW: und trotzdem fehlt der Blattname
17.03.2024 14:03:03
ralf_b
ja, und warum weist du sicher auch. in einem früheren Beitrag hast du das Listobject in der Variable tbl referenziert.
AW: und trotzdem fehlt der Blattname
19.03.2024 11:09:57
Schlumpf33
Ich habe in meinen Beispielen nie auf eine Variable "tbl" referenziert und nie ein ListObject verwendet. In meiner Anfrage war immer nur das Range Object drinn.
Aber vielleicht habe ich als VBA Neuling deine Hinweise falsch verstanden.
Das Gute an der Sache ist aber, dass mich deine Kommentare zur Lösung gebracht haben.
Die funktionierende Syntax lautet:
Cb_Anrede.RowSource = "Verweise!" & Range("tblAnrede").Address

So funktioniert es, egal aus welchem Tabellenblatt es aufgerufen wird.

Danke!
Franz
Anzeige
Viel Wirbel um Nichts (owT)
19.03.2024 12:01:53
OpaWinni
Dass .address nur den nakten Range liefert, wenn man nicht External angibt, lässt sich leicht herausfinden. Mit .address(External:=true) hätte man dann außer dem Blattnamen auch noch das Workbook dabei, das man dann auch hätte eliminieren können.
Es war jedenfalls kein Wunder, dass der Zugriff nicht funktionierte.
AW: und trotzdem fehlt der Blattname
19.03.2024 17:05:49
ralf_b
und ich hab mir das ja nicht ausgedacht. sieh dein Beitrag vom 17.03.2024 11:11:06 das Bild.
AW: und trotzdem fehlt der Blattname
19.03.2024 18:22:44
Schlumpf33
Da habe ich deine Beispiele getestet und habe entsprechend der Fehlermeldung die Variable definiert. Das war ja nie mein Ausgangspunkt.
Aber als braver Schüler habe ich natürlich alle eure Vorschläge getestet.
Anzeige
AW: und trotzdem fehlt der Blattname
19.03.2024 18:38:22
ralf_b
im Grunde wäre der Thread hier nach 3 oder 4 Posts erledigt gewesen aber wie der Teufel es wollte, gab es wohl ein Gruppenversagen. Man könnte auch sagen viele Köche verderben den Brei. Die Zellreferenz auf ein anderes Blatt muß den Blattnamen beinhalten. Sonst wird nur die Zelle auf dem aktiven Blatt angesprochen. Da kann man Glück haben das grad das richtige Blatt aktiv ist oder eben nicht. Das ist einer der häufigsten Fehler, der in der Foren zu lösen ist. Wie so oft führen aber mehrere Wege zum Ziel.
Hier kamen zwei Sachen zum tragen. Einmal verlangt Rowsource einen Text, der eine Zelladresse darstellt und keine direkte Referenz auf den Zellbereich. Und auf der andern Seite wurde zwar die Zellreferenz auf das andere Blatt gesetzt aber ohne Blattnamen im Text aufgelöst.

Möglicherweise auch ein Grund warum Rowsource, gefühlt, nicht so gern genommen wird.


Anzeige
AW: Viel Wirbel um Nichts (owT)
19.03.2024 14:38:39
Schlumpf33
Dass es für Profis klar ist, bestreite ich auch nicht. Ich als Anfänger bin aber froh, dass mich meine Frage im Project weitergebracht hat.
Schön zu hören dass es für mache eh klar war.
Dafür hat man ein Forum - um eine Lösung zu finden und nicht neunmalkluge Antworten.
AW: Viel Wirbel um Nichts (owT)
19.03.2024 15:38:33
Oppawinni
Kein Thema,, wollte dich nicht kritisieren, hat mich nur gewundert, dass es so viele Posts brauchte, um da hin zu kommen.
AW: Combobox in Userform befüllen
17.03.2024 13:57:18
Schlumpf33
Hallo Uwe,

leider verstehe ich deinen Hinweis nicht was du damit meinst.
Und in deiner https://www.herber.de/bbs/user/168076.xlsm Datei ist der Fehler nach wie vor vorhanden.

Wenn ich mit F5 aus aus der Tabelle2 (Verweise) starte, funktioniert es richtig.
Wenn ich aus Tabelle 1 starte nimmt er die Felder aus Tabelle1.

Wie schaffe ich es, dass er beim Start aus Tabelle2 die richtigen Werte aus Tabelle 2 nimmt?
Wozu ist dann die Angabe der Tabelle2 gut, wenn er diese ignoriert ? Cb_Anrede.RowSource = Tabelle2.Range("tblAnrede").Address

Gruß Franz

AW: Combobox in Userform befüllen
17.03.2024 14:51:51
Alwin Weisangler
ja das wäre dann so:



With Sheets("Verweise")
Cb_Anrede.RowSource = "'" & .Name & "'!A2:A" & .ListObjects(1).ListRows.Count + .ListObjects(1).HeaderRowRange.Row
End With


Gruß Uwe
AW: Combobox in Userform befüllen
17.03.2024 15:04:51
Alwin Weisangler
als Einzeiler:


Cb_Anrede.RowSource = "'Verweise'!A2:A" & Tabelle2.ListObjects(1).ListRows.Count + Tabelle2.ListObjects(1).HeaderRowRange.Row


Gruß Uwe
AW: Combobox in Userform befüllen
17.03.2024 15:35:02
Alwin Weisangler
mal abgesehen von der Möglichkeit zu erfahren wie man .RowSource eingelesen bekommt, ist es ziemlich Sinnfrei.

Besser, weil egal wo sich das Listobjekt befindet es immer funktioniert wäre so:


Cb_Anrede.List = Tabelle2.ListObjects(1).DataBodyRange.Value


oder noch besser ein kleines Array mit den paar Anreden anlegen und in die Combobox einlesen:


Dim arr(): arr = Array("Herr", "Frau", "Diverse")
Cb_Anrede.List =arr


Gruß Uwe
AW: Combobox in Userform befüllen
18.03.2024 12:36:57
RPP63
Moin Uwe!
Oder
Cb_Anrede.List = Split("Herr Frau Diverse")

Gruß Ralf

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige