Combobox mit excel-daten einlesen, uva

Hallo VBA Profis,

Im Rahmen eines Anlagevorschlages für einen Kunden sollen diesem mehrere Fonds angeboten werden. Ich habe ein Excel-Dokument, bei dem in der ersten Tabelle „Fondsübersicht“ eben genau dieser Anlagevorschlag stehen soll. Die Fonds sollen in Spalte B schön untereinander stehen, in Spalte C, D, E, F kommen Informationen den jeweiligen Fonds betreffend, also wie hoch das Anlagerisiko ist, die Kennnummer, etc. In einem anderen Tabellenblatt, dass ich Datenquelle genannt habe, stehen sämtliche Fonds die uns zur Verfügung stehen (ca. 4500). Der Name des Fonds steht hier in Spalte B, die restlichen Informationen in den nachfolgenden Spalten.

Um die Fonds jetzt nicht jedes mal mühsam neu aus der Datenquelle zu suchen, und die Informationen über copy-paste in den Anlagevorschlag zu kriegen, hab ich mir folgendes überlegt: Ich habe eine Combo-Box im Tabellenblatt Anlagevorschlag erstellt, die man über einen Button mit den Fondsnamen einlesen kann. Dann kann man durch Eintippen des ersten Buchstabens des Fonds oder durch Aufklappen der Combo-Box und anschließendes Suchen den Fonds leicht finden. Dann hab ich mir gedacht, dass durch Drücken eines weiteren Buttons eben genau der Fonds, der in der Combo-Box-Caption steht, aus der Datenquelle gesucht werden soll, und dann die Daten (Kennnummer,…) in das Anlagevorschlag-Tabellenblatt übertragen werden.

Das Einlesen hat auch soweit ganz gut funktioniert, nur als ich die Excel Datei von einem Rechner auf den anderen verschoben habe, gabs einen Bug, der natürlich an der 5. Zeile lag. Der Code für den cmd-Button lautete:

Private Sub Cmdread_Click()
Dim objExcel As Object
Dim objRegion As Object
Dim n As Integer

Set objExcel = GetObject("*\Anlagevorschlag.xls")
With objExcel
Set objRegion = .Worksheets(„Datenquelle“).[A1].CurrentRegion

ComboBox1.Text = „Bitte wählen sie einen Fonds aus“
For n = 2 To 5000
Call ComboBox1.AddItem(.Worksheets(„Datenquelle“).Cells(n, 2))
Next
End With
Set objRegion = Nothing
Set objExcel = Nothing
End Sub

Jetzt hat dieser Code ja zum einen den Nachteil, dass er nur dann funktioniert, wenn sich das Excel-Dokument auch am Ort „*\Anlagevorschlag.xls“ befindet, und zum anderen: Wenn die Datenquelle mal mehr als 5000 Fonds besitzt, muss der Code geändert werden. Meine Frage jetzt: Wie lautet der Code für das Einlesen der Combo-box verzeichnis- und rechnerunabhängig? Und wie kann ich es realisieren, dass er die Combobox nur so lange mit den Fondsnamen aus der Spalte B in der Datenquellentabelle einlesen soll, bis er auf eine leere Spalte trifft (dann soll er mit lesen aufhören)?

So, und beim Hinzufügen des ausgewählten Fonds hab ich noch keine Idee, wie ich das deichseln soll. Das Dumme ist nämlich, dass ich in dem Anlagevorschlag gerne den Fonds, dann die Kennnummer, die Währung und dann die Risikoklasse genau in der Reihenfolge haben möchte.

Ich bin leider in VBA nicht so bewandt, dass ich den Code jetzt in 20 Minuten runterschreiben könnte, und die Zeit, mich intensiv mit dem Thema zu befassen habe ich leider auch nicht, daher wende ich mich an euch, weil ich in diesem Forum immer wieder professionellen Rat bekommen habe. Verteile auch Sternchen! :smile:

Liebe Grüße
Florian

Hallo flo.

Und wie kann ich es realisieren, dass er die Combobox nur so
lange mit den Fondsnamen aus der Spalte B in der
Datenquellentabelle einlesen soll, bis er auf eine leere
Spalte trifft (dann soll er mit lesen aufhören)?

Dieses Problem könntest Du mit einer Tabellenblatt-Funktion lösen:
Wenn Du auf dem Tabellenblatt, das die Fonds-Auflistung enthält, folgende Formel in irgendeine freie Zelle schreibst, dann kannst Du beim Einlesen den darin enthaltenen Wert abfragen.

=65536-ANZAHLLEEREZELLEN(B:B)

(Bei älteren Versionen von Excel muss die Zahl 65536 natürlich auf Richtigkeit überprüft werden)

Viele Grüße
Carsten

Hallo flo.

Ich muss nochmal was nachfragen:

Befinden sich die beiden Tabellenblätter in einer Datei mit zwei Tabellenblättern, oder gibt es zwei Dateien mit jeweils einem Tabellenblatt?

Mich irritiert ein wenig die Frage nach dem Verzeichnis.

Viele Grüße
Carsten

Hallo flo.

Ich muss nochmal was nachfragen:

Befinden sich die beiden Tabellenblätter in einer Datei
mit zwei Tabellenblättern, oder gibt es zwei Dateien
mit jeweils einem Tabellenblatt?

Hallo Carsten,

ich habe eine Excel-file mit 2 Tabelleblättern, in eins kommt der Anlagevorschlag - speziell auf den Kunden zugeschnitten - das andere Tabellenblatt ist die Datenquelle. Wegen dem Verzeichnis: Ich habe mal den Tip bekommen, das Combobox-Einlesen mit dem „GetObject()“ Befehl zu machen. In die Klammer muss aber das Verzeichnis der Excelfile also „C:…\Anlagevorschlag“ oder irgendwie sowas. Wenn man jetzt aber die Excelfile verschiebt, stimmt das ja nicht mehr, und der Code müsste geändert werden…

Noch was: Hier hab ich geschrieben

> Und wie kann ich es realisieren, dass er die Combobox nur so
> lange mit den Fondsnamen aus der Spalte B in der
> Datenquellentabelle einlesen soll, bis er auf eine leere
> Spalte trifft (dann soll er mit lesen aufhören)?

Muss natürlich heißen „…bis er auf eine leere Zeile trifft“

Hallo flo.

Wegen dem Verzeichnis: Ich habe mal den Tip bekommen, das
Combobox-Einlesen mit dem „GetObject()“ Befehl zu machen. In
die Klammer muss aber das Verzeichnis der Excelfile also
„C:…\Anlagevorschlag“ oder irgendwie sowas. Wenn man jetzt
aber die Excelfile verschiebt, stimmt das ja nicht mehr, und
der Code müsste geändert werden…

Ich habe da was gefunden, was Dir helfen sollte:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Cells(1, 1) = DieseArbeitsmappe.Path
End Sub

Diese Anweisung gibt aber eine leere Zeichenfolge zurück, sofern die Datei noch nirgends gespeichert wurde.

Soweit erstmal das.

Hat Dir die Funktion mit ANZAHLLEEREZELLEN zugesagt und/oder geholfen?

Viele Grüße
Carsten.