Dynamische Erstellung von Listboxen

Hallo zusammen,

ich habe ein dringendes Problem in VBA unter Excel.
Es sollen zur Laufzeit in einen Userformbereich beliebig
viele ListBox-Controls eingefügt werden, auf die dann auch dynamisch zugegriffen werden können muss. Ideal wäre, wenn der Bereich des Userforms einen Scrollbalken hat, der automatisch größer wird, je nachdem wieviele Listboxen hineinkommen.

Geht so was mit VBA-Mitteln? Wenn ja habt Ihr vielleicht Beispiele oder die entscheidenen Befehle?

Vielen, vielen Dank im voraus!
Beste Grüße,
Marcel

Hallo Marcel,

Es sollen zur Laufzeit in einen Userformbereich beliebig
viele ListBox-Controls eingefügt werden, auf die dann auch
dynamisch zugegriffen werden können muss. Ideal wäre, wenn der

ich bin nicht sicher ob es auch in VBA geht. In VB konnte ich sowas mit einem Control-Array lösen. Du legst ein Element dieses Arrays mit Index 0 im Formular an und machst es unsichtbar. Du kannst dieses Array dann per code dynamisch ansprechen und weitere Elemente mit Index 1,2,3, usw. erzeugen.

Ist leider schon lange her, daher kann ich jetzt kein Beispiel posten, ist aber meines Wissens der einzige Ansatz, so etwas zu realisieren.

Gruß
Marian

Das dynamische Erstellen von Steuerelementen wie der Listbox ist AFAIK in VB6 der Enterprise Edition vorbehalten, deshalb zweifel ich mal stark, dass dies in VBA unter Excel möglich ist.

Ralph

ich habe ein dringendes Problem in VBA unter Excel.
Es sollen zur Laufzeit in einen Userformbereich beliebig
viele ListBox-Controls eingefügt werden, auf die dann auch
dynamisch zugegriffen werden können muss. Ideal wäre, wenn der
Bereich des Userforms einen Scrollbalken hat, der automatisch
größer wird, je nachdem wieviele Listboxen hineinkommen.

Folgender Text stammt aus der VBA-Hilfe von Excel:

_In dem folgenden Beispiel wird die Add-Methode verwendet, um einem Formular zur Laufzeit ein Steuerelement hinzuzufügen. Weiterhin wird das AddControl-Ereignis verwendet, um zu bestätigen, daß das Steuerelement hinzugefügt wurde.
Wenn Sie dieses Beispiel verwenden möchten, kopieren Sie den Beispiel-Code in den Deklarationsabschnitt eines Formulars. Stellen Sie sicher, daß das Formular folgendes enthält:

· Ein Befehlsschaltflächen-Steuerelement (CommandButton) mit dem Namen CommandButton1.
· Ein Bezeichnungsfeld-Steuerelement (Label) mit dem Namen Label1.

Dim TestBefehl as Control
Private Sub CommandButton1\_Click()

 Set TestBefehl = Controls.Add("Forms.CommandButton.1") ', CommandButton2, Visible)
 TestBefehl.Left = 18
 TestBefehl.Top = 150
 TestBefehl.Width = 175
 TestBefehl.Height = 20
 TestBefehl.Caption = "Alles klar?" & TestBefehl.Name

End Sub

Private Sub UserForm\_AddControl(ByVal Control As MSForms.Control)
 Label1.Caption = "Steuerelement wurde hinzugefügt."
End Sub_    

Der Doc!

Hi,
vielen Dank für Deine Antwort! Der springende Punkt ist das dynamische Zugreifen auf die erzeugten Objekte.
So wie in der Hilfe beschrieben habe ich das schon gemacht. Auch als Feld. Folgender Code erzeugt mehrere Listboxen.

Dim Listboxen(5) As Control
Private Sub CommandButton1_Click()
For i = 1 To 5
Set Listboxen(i) = Controls.Add(„Forms.ListBox.1“, „ListBox“ + Mid(Str(i), 2, 1), Visible)
Listboxen(i).Left = 18
Listboxen(i).Top = 150 + i * 10
Listboxen(i).Width = 175
Listboxen(i).Height = 20
Next i

End Sub

Das Problem ist jetzt erstens überhaupt auf die erzeugten Listboxen zuzugreifen und das nächste Problem ist es, das
auch noch dynamisch, also ohne fest vorgegebenen Namen zu machen.

Zum generellen Zugriff steht in der VBA Hilfe :

Sie können der Controls-Auflistung eines Benutzerformulars zur Entwurfszeit ein Steuerelement hinzufügen. Allerdings müssen Sie hierzu die Designer-Eigenschaft der Microsoft Visual Basic for Applications Extensibility Library verwenden. Die Designer-Eigenschaft gibt das UserForm-Objekt zurück.
Die folgende Syntax gibt die Text-Eigenschaft des angegebenen Steuerelements zurück:
userform1.thebox.text
Bei einem zur Laufzeit hinzugefügten Steuerelement müssen Sie, um auf die Eigenschaften dieses Steuerelements zu verweisen, die Syntax mit Ausrufezeichen verwenden. Zur Rückgabe der Text-Eigenschaft eines Steuerelements verwenden Sie beispielsweise die folgende Syntax:
userform1!thebox.text

Das funktioniert ohne Ausrufezeichen auch mit statisch erzeugten Controls. Aber die Variante mit Ausrufezeichen geht bei mir nicht.
Was ist denn diese Microsoft Visual Basic for Applications Extensibility Library ? Muss ich die installieren, damit es klappt?

Dann bliebe ja auch noch der dynamische Zugriff……