hummel85
Goto Top

Dynamische Combobox

Hab lange keine Excelmacros mehr geschrieben darum dachte ich das ich mal wieder hier vorbei schaue.

Ich wollt anhand eines Worksheets welches nur Name enthällt eine Combobox befüllen. Die anzahl an Namen kann sich jederzeit ändern darum das ganze auch dynamisch.

Leider funktionieren meine ganzen ansätze nicht. Eigentlich wollt ich anfangen mit einer Schleife die kontrolliert ob der ihnalt der Zelle <> "" (also nicht leer) ist. Wenn der was in der Zelle findet soll der das in eine Variable schreiben und dann an die Combobox übergeben werden. Alles was ich versucht habe hat dazu geführt das nichts in der ComboBox steht. Leider habe ich jetzt alles einfach gelöscht weil ich so sauer war das ich das nicht hinbekommen habe und kann deshalb nicht meine ansätze posten.


Ich hoffe ihr könnt mir helfen.

MfG Sebastian

Content-Key: 124926

Url: https://administrator.de/contentid/124926

Printed on: April 24, 2024 at 08:04 o'clock

Member: exchange
exchange Sep 14, 2009 at 20:33:29 (UTC)
Goto Top
Hallo,
deinen Ansatz hätte ich jetzt als "Semi Pro" auch nicht anders in Delphi gelöst.

Schleife bis Zeilenende bzw. Inhalt = "" und dann die Combobox mit AddItem füllen.

fertig.

Gruss
Heiko
Mitglied: 76109
76109 Sep 15, 2009 at 16:23:06 (UTC)
Goto Top
Hallo zusammen!

Wenn sich die Liste in einer Tabelle befindet, dann eher so:
'ComboBox in UserForm  
With UserForm1.ComboBox1
    .RowSource = Sheets("Tabelle1").Range("A1").CurrentRegion.Address  
    .ListIndex = 0
End With

'ComboBox in Worksheets einbetten  
With ComboBox1
    .ListFillRange = Range("A1").CurrentRegion.Address  
    .ListIndex = 0
End With

Gruß Dieter
Member: Hummel85
Hummel85 Sep 18, 2009 at 01:20:32 (UTC)
Goto Top
Fast am Ziel.

Jedoch nimmt der den inhalt der Tabelle die ich ausgewählt habe. Ich habe 4 Worksheets in der Excel Datei.

Die 1. ist die übersicht. In der 3.( die "name" heißt) befinden sich die namen die der auslesen soll.

Ich habe versucht das abzuändern aber es passiert nix. Mach ich was falsch?

'ComboBox in UserForm   
With UserForm1.ComboBox1 
    .RowSource = Sheets("name").Range("A1").CurrentRegion.Address   
    .ListIndex = 0 
End With 
Mitglied: 76109
76109 Sep 18, 2009 at 06:00:05 (UTC)
Goto Top
Hallo Hummel85!

Bei der Code-Auswahl
UserForm1.ComboBox1
gehe ich davon aus, dass Du eine User-Form im VB-Editor erstellt hast.

Dann bleiben erst mal die Fragen:
1. Ist der Name Deines Formulars "UserForm1"?
2. Ist der Name Deiner Combo-Box "Combo-Box1"?
3. Wurde der Code vor öffnen der UserForm ausgeführt (initialisiert)?

Also, wenn es sich um eine User-Form im VB-Editor handelt, dann kopiere diesen Quelltext
Private Sub UserForm_Initialize()
    With ComboBox1
        .RowSource = Sheets("name").Range("A1").CurrentRegion.Address  
        .ListIndex = 0
    End With
End Sub
an den Anfang vom UserForm-Code. Dadurch wird die Combo-Box automatisch vor dem Öffnen der User-Form initialisiert.

Gruß Dieter
Member: Hummel85
Hummel85 Sep 18, 2009 at 19:56:09 (UTC)
Goto Top
Erstmal zu deinen Fragen.

zu 1.: Ja
zu 2.: Ja
zu 3.: Ja

Problem ist das der den inhalt aus der ausgewählten Tabelle nimmt.

Funktionieren würde es mit

Private Sub UserForm_Initialize()

Worksheets("name").Activate  
ActiveCell.CurrentRegion.Select

    With ComboBox1
        .RowSource = Sheets("name").Range("A1").CurrentRegion.Address  
        .ListIndex = 0
    End With

Worksheets("1").Activate  
ActiveCell.CurrentRegion.Select


End Sub

Gibt es eine andere Lösung bei der ich in deinem Code den befehl CurrentRegion umarbeite?
Mitglied: 76109
76109 Sep 18, 2009 at 22:26:25 (UTC)
Goto Top
Hallo Hummel85!

Ups, mein Fehler. Da habe ich doch glatt vergessen den Tabellennamen mit anzugeben face-sad

So sollte es jetzt funktionieren:
Private Sub UserForm_Initialize()
    Dim Wks As Worksheet
    
    Set Wks = Sheets("name")  
    
    With ComboBox1
        .RowSource = Wks.Name & "!" & Wks.Range("A1").CurrentRegion.Address  
        .ListIndex = 0
    End With
End Sub
Alternativ auch so:
.RowSource = Wks.Name & "!A1:A" & Wks.Cells(Wks.Rows.Count, "A").End(xlUp).Row  

Gruß Dieter
Member: Hummel85
Hummel85 Sep 19, 2009 at 23:32:32 (UTC)
Goto Top
Is genau das was ich gesucht habe.

Vielen dank. Alles zu meiner zufriedenheit gelöst.