Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Mehrspaltiges ungebundenes Kombinationsfeld füllen?

47 views
Skip to first unread message

Thomas Gehrmann

unread,
Oct 12, 2007, 3:00:30 AM10/12/07
to
Hallo NG,
von VBA unter Excel kenne ich es so, dass ich eine mehrspaltige ComboBox
z.B. so füllen kann:

J = 0
For I = 1 To 10
ComboBox1.AddItem
ComboBox1.Column(0, J) = I
ComboBox1.Column(1, J) = "Wert: " & I
J = J + 1
Next I

Nun bin ich gerade dabei auf Access umzusatteln und brauche dort eine
vergleichbare Möglichkeit. Das heißt, ich habe in einem Formular ein
ungebundenes dreispaltiges Kombinationsfeld, welches ich per Code befüllen
möchte. Bei 1 Spalte ist das kein Problem (RowSource), aber ich habe bisher
leider keine Möglichkeit gefunden, die einzelnen Spalten gesondert zu
befüllen. Natürlich könnte ich den Source-String so schreiben, dass die
Werte in die richtigen Spalten eingelesen werden. Mich interessiert aber, ob
es eine Möglichkeit gibt, die Spalten gesondert anzusprechen.

Vielen Dank
Thomas


Jens Schilling

unread,
Oct 12, 2007, 7:26:18 AM10/12/07
to
Hallo, Thomas

AddItem erwartet einen String für die Werte, und einen (optionalen)
Indexwert, an dem eingefügt werden soll.
Die nachfolgende Sub schreibt nummeriert ( beginnend bei 0 ) das Alphabet in
Gross- und Kleinbuchstaben in ein Kombinationsfeld.
Das Setzen von RowSourceType und ColumnCount soll nur sicherstellen, dass
alles passt, dass kannst Du natürlich auch in den Eigenschaften der ComBox
einstellen.

Sub FillCombo()
Dim i As Long
Dim j As Long
Dim strItem As String

'Kombi auf Wertliste einstellen
Me.MeinKombo.RowSourceType = "Value List"

'Auf drei Spalten einstellen
Me.MeinKombo.ColumnCount = 3

'Löschen
Me.MeinKombo.RowSource = ""

j = 0

'Das Alphabet einfügen - Gross- und Kleinbuchstaben
For i = 65 To 90

strItem = j & ";" & Chr(i) & ";" & Chr(i + 32) & ";"

Me.MeinKombo.AddItem strItem, (j)
j = j + 1

Next i

End Sub

--
Gruss
Jens
______________________________
FAQ: http://www.donkarl.com


Michel Fouquet

unread,
Oct 12, 2007, 1:46:53 PM10/12/07
to
Hallo,

Thomas Gehrmann schrieb:

zum Befüllen von Listboxen und Kombifeldern gibt es in Access
spezifische Callback-Routinen. Näheres dazu findet man samt Beispielen
in der OH VB unter "RowSourceType-Eigenschaft (Herkunftstyp)". Die
Beispiele erreicht man über den Link im Text "bestimmte Code-Argumente
der Funktion" bzw. "Funktionsformat".

Auch die MSKB stellt das Vorgehen dar:

ACC: How to Fill a Combo Box with Table Names
http://support.microsoft.com/?scid=kb;en-us;126946

Bei tecChannel sind die ersten 4 Seiten eines Beitrags des Kollegen
Hölscher verfügbar, die das Vorgehen erklären:

Flexiblere Listen
http://www.tecchannel.de/index.cfm?pid=907&pk=464201

Für mehrspaltige Listen ist es etwas komplizierter, siehe:

Callback function for a Multi Column List box
http://www.mvps.org/access/forms/frm0049.htm

Das Problem der von Jens vorgeschlagenen Lösung liegt darin, dass für
die Werteliste ein String generiert wird, dessen Länge begrenzt ist.

Mit den spezifischen Access-Callback-Funktionen passiert das nicht.

mfg,
Michel

--
Informationen für Newbies (Neulinge) in den Access-Newsgroups
http://www.doerbandt.de/Access/Newbie.htm

OH VB: Online Hilfe von VBA im VB Editor (Taste F1)
FAQ: http://www.donkarl.com/AccessFAQ.htm
KnowHow.mdb: http://www.freeaccess.de/knowhow.asp

Michel Fouquet

unread,
Oct 13, 2007, 8:29:10 AM10/13/07
to
Hallo,

Thomas Gehrmann schrieb:


> Das heißt, ich habe in einem Formular ein
> ungebundenes dreispaltiges Kombinationsfeld, welches ich per Code befüllen
> möchte. Bei 1 Spalte ist das kein Problem (RowSource), aber ich habe bisher
> leider keine Möglichkeit gefunden, die einzelnen Spalten gesondert zu
> befüllen. Natürlich könnte ich den Source-String so schreiben, dass die
> Werte in die richtigen Spalten eingelesen werden. Mich interessiert aber, ob
> es eine Möglichkeit gibt, die Spalten gesondert anzusprechen.

irgendwie hat sich deine Fragestellung bei mir eingenistet, weil ich sie
wohl nicht ganz richtig verstanden habe. Es wäre sicherlich wohl
hilfreich, ein konkretes Anwendungsbeispiel für deine Fragestellung zu
posten.

Du hast prinzipiell folgende Möglichkeiten, ein zunächst ungebundenes
Kombifeld zu befüllen:

1. Herkunftstyp: Tabelle/Abfrage
Datensatzherkunft: Name einer Tabelle oder Abfrage
Dabei sind die gewünschten Spalten enthalten und befüllt, sofern die
Anzahl der Spalten (und deren Breite) korrekt angegeben wird.

2. Herkunftstyp: Tabelle/Abfrage
Datensatzherkunft: ein SQL-Statement
Dabei sind die gewünschten Spalten enthalten und befüllt, sofern die
Anzahl der Spalten (und deren Breite) korrekt angegeben wird.

3. Herkunftstyp: Wertliste
Datensatzherkunft: ein String mit den Werten
Dabei sind, bei korrektem Aufbau des Strings und entsprechender Angabe
der Spaltenanzahl und -breite, die gewünschten Spalten enthalten und
befüllt.

Sofern die zulässige Länge des String überschritten würde, was bei
mehrspaltigen Kombifeldern schnell erreicht ist, ist es möglich und
sinnvoll, die Werte in eine (temporäre?) Tabelle zu schreiben und diese
dann als Datensatzherkunft für den Herkunftstyp Tabelle/Abfrage
festzulegen.

4. Herkunftstyp: Callback-Routine
Datensatzherkunft: keine
Dabei sind, bei korrektem Aufbau der Callback-Funktion und
entsprechender Angabe der Spaltenanzahl, die gewünschten Spalten
enthalten und befüllt.

(Naja, die fünfte Möglichkeit - Feldliste - lasse ich jetzt mal weg.)

Im Rahmen eines DBMS finde ich das Befüllen und Auslesen einer Tabelle
als Datenquelle eines Kombi- oder Listenfeldes eigentlich das Mittel der
Wahl. U.a. aus folgenden Gründen:

1. die Datenquelle kann nach Wunsch sortiert werden
2. der Datenquelle können neue Werte hinzugefügt werden
3. einzelne Werte der Datenquelle können ersetzt werden. Das Parsen des
Strings einer Wertliste und das Ersetzen eines Wertes wäre da vermutlich
aufwändiger.
4. einzelne Werte können aus der Datenquelle entfernt werden
5. Werte können für eine weitere Verarbeitung mit Flags versehen werden
6. die Datenquelle kann über ein entsprechendes Verknüpfungsmerkmal mit
anderen Tabellen in Beziehung gesetzt werden

Halt alles, was man mit einer Tabelle oder Abfrage so anstellen kann.

mfg,
Michel

--
Informationen für Newbies (Neulinge) in den Access-Newsgroups
http://www.doerbandt.de/Access/Newbie.htm

FAQ: http://www.donkarl.com/AccessFAQ.htm
KnowHow.mdb: http://www.freeaccess.de/knowhow.asp

0 new messages