PDA

Vollständige Version anzeigen : ComboBox erzeugen mittels VBA


TerenceJackson
26.07.2007, 16:22
Hi,

ich habe die Funktion getNames(), welche mir die Namen der einzelnen Zeilen der Tabelle als Array zurückgibt.
(Bsp.:
Tabelle: id | Name1 | Name2 | Name3 | ...
Array = ("id", "Name1", ...)
)

Dieser Array hat ungefähr 50 Einträge.

Jetzt würde ich gerne über eine VBA Funktion automatisch zu jedem Eintrag ein Label und eine ComboBox erzeugen lassen.

Wie kann ich aber über eine schleife diese 50 Labels und die ComboBoxen erstellen?

fields = getNames
For i = 1 To Ubound(fields) + 1
'Create Label1 ...
'Create ComboBox1 ...
Next i


Danke im Vorraus!!

Gruß
TJ

Anne Berg
26.07.2007, 17:53
Such mal hier oder in der Access-Hilfe nach "CreateControl".

TerenceJackson
26.07.2007, 19:04
Ok,

danke, habe die ComboBoxen jetzt im Formular.
Allerdings habe ich ein Problem mit dem Füllen der ComboBox.
Ich habe die ComboBox folgendermaßen erstellt

Set ctlCombo = CreateControl(frm.Name, acComboBox, , , , intComboX, intLabelY, 300, 300)
ctlCombo.Name = "ComboBox" & i + 1
ctlCombo.RowSourceType = "Werteliste"
For z = 0 To UBound(fields)
ctlCombo.AddItem (fields(z))
Next z

Allerdings kommt dann die Meldung, dass ich den Typ als Werteliste festlegen soll, da ich sonst keine Daten eintragen kann.
Ich muss das aber so machen.
Wenn ich mir allerdings das erstellte Formular anschaue, dann zeigt er mir in den Eigenschaften als Herkunftstyp Werteliste an.
Woran kann das liegen, dass ich keine Werte in die ComboBox einfügen kann?

SWR
26.07.2007, 19:18
Geht vielleicht zufällig "Value List" anstelle von "Werteliste" ?

Me!cmb1.RowSourceType = "Value List"
Me!cmb1.RowSource = "1;2"

Gruß
Stephan

hcscherzer
26.07.2007, 19:47
Moin,
in Anlehnung an Stephan:
ctlCombo.RowSourceType = "Value List"
For z = 0 To UBound(fields)
ctlComboSource = ctlComboSource & ";" & fields(z)
Next z
ctlComboSource = Left(ctlComboSource, Len(ctlComboSource) -1)
ctlCombo.RowSource = ctlComboSource

SWR
26.07.2007, 19:58
Aber auch die AddItem-Methode läuft eigentlich problemlos:
Me!cmb1.RowSourceType = "Value List"
'Me!cmb1.RowSource = ""
Dim arr(5) As String, i As Integer
arr(1) = "Hallo"
arr(2) = "Bla"
arr(3) = "Moin"
arr(4) = "Test"
arr(5) = "Access"

For i = 1 To UBound(arr)
Me!cmb1.AddItem arr(i)
Next iGruß
Stephan

TerenceJackson
27.07.2007, 10:40
OK, danke.
Ich habe mir jetzt einen String zusammengebastelt (siehe hcscherzer), den ich als RowSource einfüge.
Ich werde aber das AddItem auch noch mal testen.

Kann ich als RowSourceType eigentlich auch eine VBA Funktion hinterlegen?
Oder muss das zwingend eine SQL Abfrage oder Tabelle sein?

Also, könnte ich z.B. direkt als RowSourceType "getAllNames" angeben, so das es funktioniert?

hcscherzer
27.07.2007, 17:36
.RowSourceType: entweder "Value List" oder "Table/Query" oder "Field List"
.RowSource: ist abhängig vom gewählten Typ
Wertliste kennst Du schon, da wird eine Aufzählung von Strings erwartet;
beim Typ Feldliste wird als Datenquelle ein Tabellen- oder Abfragename erwartet und in der ComboBox stehen dann die Feld- bzw. Spaltennamen;
beim Typ Tabelle/Abfrage ist die Datenquelle eine Tabelle, Abfrage oder eine SQL-Select Anweisung, hier sind dann die Feldinhalte der angegebenen Felder aufgelistet.

Anne Berg
27.07.2007, 23:16
Hallo,Kann ich als RowSourceType eigentlich auch eine VBA Funktion hinterlegen?Ja, schau mal in der Access-Hilfe unter dem Strichwort "RowSourceType-Eigenschaft (benutzerdefinierte Funktion)" nach, da findest du Beispiele.