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

VBA Werte aus Spalte A in Combobox einlesen

1,324 views
Skip to first unread message

Beck, Alwin

unread,
Mar 25, 2009, 9:15:17 AM3/25/09
to
Excel 2003

Hallo,

ich habe eine Tabelle und ein Formular. Auf dem Formular
befinden sich Comboboxen welche werte aus z.B. Spalte A
einlesen sollen ! Beim DropDown sollen diese dann angezeigt werden.

Wie mache ich das, dass
a) dass die Überschrift der z.B. Spalte A nicht mit eingelesen wird
b) keine doppelten werten aufgelistet werden

Für a und b habe ich keine Lösung. Mein Ansatz war wie folgt :


Private Sub ComboBox1_DropButtonClick()
Dim Bereich

Bereich = Columns("A:A").Select

ComboBox1.ListRows = Bereich

End Sub

Danke
Gruß
Albe

Susanne Senger

unread,
Mar 26, 2009, 5:28:46 AM3/26/09
to
Hallo, Alwin,

ich habe neulich einen Excel-VBA-Kurs gegeben, wo genau dieses Problem zur
Sprache kam. Ich habe allerdings die Combo beim Laden des Formulars gefüllt
und nicht erst beim Dropdown.

Mit Deinem Bereich kommst Du nicht weit. Ich hab das so gemacht:

zuerst habe ich den Bereich ohne Überschrift auf ein neu eingefügtes
Tabellenblatt kopiert und mit Spezialfilter die Dubletten und die
Überschrift rausgeworfen.
Das Füllen ging dann so:
Sub DatenInForm()
Dim LetzteZeile, X As Integer
Range("a1").Select
LetzteZeile = ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Row - 1
ReDim strListenWert(LetzteZeile) As String
For X = 0 To LetzteZeile
Cells(X + 1, 1).Select
strListenWert(X) = Cells(X + 1, 1).Value
frmTest.cboListe.AddItem strListenWert(X)
Next
Sheets("Hilfstabelle").Delete 'brauchen wir nicht mehr
frmTest.Show
End Sub

Gruß
Susanne


"Beck, Alwin" <ungu...@ungueltig.invalid> schrieb im Newsbeitrag
news:%2370e9uU...@TK2MSFTNGP03.phx.gbl...

Andreas Killer

unread,
Mar 26, 2009, 10:21:36 AM3/26/09
to
Beck, Alwin schrieb:

> ich habe eine Tabelle und ein Formular. Auf dem Formular
> befinden sich Comboboxen welche werte aus z.B. Spalte A
> einlesen sollen ! Beim DropDown sollen diese dann angezeigt werden.

Lies mal bitte

http://groups.google.de/group/microsoft.public.de.excel/browse_thread/thread/2c7e088f60420748/d8d854ab6a1872e8

Andreas.

Michael Schwimmer

unread,
Mar 26, 2009, 12:00:34 PM3/26/09
to
Hallo Susanne,

Am Thu, 26 Mar 2009 10:28:46 +0100 schrieb Susanne Senger:
> ich habe neulich einen Excel-VBA-Kurs gegeben, wo genau dieses Problem zur
> Sprache kam. Ich habe allerdings die Combo beim Laden des Formulars gefüllt
> und nicht erst beim Dropdown.
> Mit Deinem Bereich kommst Du nicht weit. Ich hab das so gemacht:
> zuerst habe ich den Bereich ohne Überschrift auf ein neu eingefügtes
> Tabellenblatt kopiert und mit Spezialfilter die Dubletten und die
> Überschrift rausgeworfen.
> Das Füllen ging dann so:
> Sub DatenInForm()
> Dim LetzteZeile, X As Integer
> Range("a1").Select
> LetzteZeile = ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Row - 1
> ReDim strListenWert(LetzteZeile) As String
> For X = 0 To LetzteZeile
> Cells(X + 1, 1).Select
> strListenWert(X) = Cells(X + 1, 1).Value
> frmTest.cboListe.AddItem strListenWert(X)
> Next
> Sheets("Hilfstabelle").Delete 'brauchen wir nicht mehr
> frmTest.Show
> End Sub

sei mir nicht böse, aber wenn du schon VBA-Kurse gibst, solltest du auch
ein Vorbild sein. Ein paar Anmerkungen zu deinem Code:

LetzteZeile ist als Variant deklariert, da fehlt die Angabe des Datentyps!
Was soll das Select dort? Range("a1").Select
Weches Blatt ist gemeint (vollständig referenzieren)? Range("a1").Select
Weches Blatt ist gemeint (vollständig referenzieren)? Cells(X + 1,
1).Select
Warum selektierst du auch dort?
Wo ist das Array strListenWert deklariert? Benötigst du den Inhalt in der
Kombobox UND zusätzlich noch im Array?
Wenn im Initialisierungsereignis der Userforn (UserForm_Initialize) die
Prozedur aufgerufen wird, ist frmTest.Show unnötig.
Du löschst dann auch noch das Blatt "Hilfstabelle", willst du dir beim
nächsten Anzeigen noch mal die ganze Arbeit machen?

Ungeachtet dessen sollte man die Sache anders anpacken. In einer Schleife
werden alle Zellen der Spalte 1 ab Zeile 2 durchlaufen, bis man am Ende
angekommen ist (leere Zelle). Wenn Leerzellen vorkommen dürfen, muss man
natürlich anders das Ende bestimmen.
Dann erzeugt man eine Collection und fügt den Zellinhalt oder etwas anderes
als Element ein. Ganz wichtig ist, dass als Schlüssel (Key) der Zellinhalt
benutzt wird. Vor dem Einfügen wird das Error-Objekt zurückgesetzt. Tritt
ein Fehler auf, weil der Zellinhalt schon einmal als Schlüssel benutzt
wurde, wird nichts in die Kombobox eingetragen. Ist die Fehlernummer Null,
kann man mit AddItem den Inhalt in die Kombobox kopieren. Zu beachten ist,
dass die Groß- und Kleinschreibung beim Verwenden von Schlüsseln nicht
beachtet wird.
Man könnte nun auch erst den Inhalt der Zellen in einem Array
zwischenspeichern und mit irgendeiner Sortierroutine sortieren, bevor man
den Kram in einer weiteren Schleife in die Kombobox überträgt.

Nachfolgend ein kleines Beispiel, wie so etwas aussehen könnte. Zum
Sortieren habe ich hier auf die Schnelle ein ListView-Control genommen, was
die Eigenschaft Sorted hat. Man kann dabei angeben, ob auf- oder absteigend
sortiert wird.

Private Sub FillKomboBox()
Dim objList As Object
Dim colUni As New Collection
Dim i As Long
Const lvwDescending = 1
Const lvwAscending = 0
On Error Resume Next

' Listbox laden
Set objList = CreateObject("MSComctlLib.ListViewCtrl")

objList.Sorted = True
objList.SortOrder = lvwAscending

With Worksheets("Tabelle2")
' Dummy-Listbox füllen
i = 2 ' 1. Zeile mit Daten
Do While .Cells(i, 1) <> "" ' 1= Spalte A
Err.Clear
colUni.Add .Cells(i, 1), "A" & .Cells(i, 1)
If Err.Number = 0 Then
' Nur einzigartige
objList.ListItems.Add , , .Cells(i, 1)
End If
i = i + 1
Loop

ComboBox1.Clear

' Listbox auslesen
For i = 1 To objList.ListItems.Count
ComboBox1.AddItem objList.ListItems(i)
Next

End With

End Sub

Private Sub UserForm_Initialize()
FillKomboBox
End Sub

Viele Grüße
Michael


--
http://michael-schwimmer.de
Masterclass Excel VBA ISBN-10: 3827325250
Das Excel-VBA Codebook ISBN-10: 3827324718
Microsoft Office Excel 2007-Programmierung ISBN-10: 3866454139

0 new messages