Hallo und moin von mir,
Daten aus einer Tabellenspalte nocheinmal auf einer UserForm darzustellen macht aus meiner Sicht nur Sinn, wenn es dir ums lernen geht.
In der Beispielaufgabe stehen mehrere Lernthemen:
1. Texte im Label Steuerelement anzeigen:
Um einen String in einem Label anzuzeigen nutzt du die .Caption Eigenschaft:
Code:
Label1.Caption = "Mein Text"
2. Darstellen eines Eindimensionalen Arrays als String mit einem Trenner:
Du kannst eine Liste an Daten in ein eindimensionales Array schreiben, und alle enthaltenen Elemente in einem Rutsch mit einem von dir gewünschten Trennzeichen in einen String umwandeln (den du dann der .Caption-Eigenschaft zuweisen kannst). Hierfür gibt es das Schlüsselwort Join(array,delimiter). Ein Zeilenumbruch ist in VBA eine Kombination aus Zeilenvorschub und Rücklauf. In VBA kannst du auch einfach auf die vbCrLf-Konstante zugreifen:
Code:
MeinString = Join(dasArray, vbCrLf)
3. Wandeln eines Zellbereichs in ein Array.
Damit aus deinem Zellbereich ein Array wird, dass du mit Join in einen String wandeln kannst, kannst du den Zellbereich einfach einer Variant-Variblen zuweisen. VBA macht für dich automatisch ein (zweidimensionales) Array daraus:
Code:
MeinArray = Range("C6:C80")
4. Wandeln eines zweidimensionalen Arrays in ein eindimensionales Array durch transponieren:
Blöderweise sind Arrays aus Rangeobjekten immer zweidimensional, selbst wenn du nur eine Spalte oder Zeile eingelesen hast. Join kann allerdings nur eindimensionale Arrays verarbeiten. Daher:
Code:
Eindimensional = WorksheetFunction.Transpose(zweiDimensionalesEinspaltenArray)
5. Zugriff auf den gefüllten Bereich
Es gibt mehrere Methoden, um auf die Zellen eines Bereiches zuzugreifen. Wenn der Bereich unterhalb der Startzelle durchgehend gefüllt ist, und aus mehr als einer Zelle besteht, funktioniert die Simulation der Tastenkombination Strg+Pfeil runter ganz gut. Ein zusammenhängendes Rangeobjekt aus Anfangs und Endzelle erzeugst du mit der Range-Methode:
Code:
Set ZellBereichUnterhalb = Range(Cells(1,1),Cells(1,1).End(xlDown))
Wenn nicht sicher ist, das mehr als eine Zelle gefüllt ist, dann geht es auch von unten:
Code:
Set ZellBereichUnterhalbVonUnten = Range(Cells(1,1), Cells(Rows.Count,1).End(xlup))
Eine dritte Alternative (und die, die ich verwenden würde) wäre der Zugriff auf eine bestimmte Spalte der zusammenhängend Gefüllten Region um eine Zelle herum:
Code:
Set ZellBereichUmZelleHerum = Cells(1).CurrentRegion.Columns(1)
Damit hättest du schon fast alles, was du benötigst.
6. Einfache Kontrollstruktur
Weil du noch einen Unterschied machen willst, je nachdem, ob der Zellbereich überhaupt gefüllt ist, brauchst du noch Kenntnisse über eine einfache Kontrollstruktur Wie If...Then...Else...End If. Diese Struktur führt die Befehle die Zwischen Then und Else stehen aus, wenn die Bedingung des If-Bereichs wahr ist und die Befehle zwischen Else und End If, falls die Bedingung nicht zutrifft:
Code:
If Rnd() > 0.5 Then
Debug.Print "Die Zufallszahl war größer als 0,5"
Else
Debug.Print "Die Zufallszahl war nicht größer als 0,5"
End If
7. Ereignishandler für das Click-Event
Damit dein Code ausgeführt wird, brauchst du noch einen "Trigger". Du hast dich für das Click-Event des Buttons entschieden.
Code:
Sub DeinButton_Click()
Debug.Print "Knopf gedrückt"
End Sub
Damit hättest du alles, was du für deine ansonsten ziemlich zweckfreie Übung benötigst.
Viel Spaß beim Nachbauen!
derHöpp