HERBERS Excel-Forum - das Archiv
Tabelle in UserForm einbinden
Karl

Hallo,
weiß zufällig einer von Euch, wie ich eine Tabelle in eine UserForm einbinden kann? Dabei wäre es gut, wenn sowohl die Anzahl der Spalten, als auch die der Zeilen variabel wären.
Vielen Dank schon mal im Voraus!!!
Gruß Karl

AW: Tabelle in UserForm einbinden
fcs

Hallo Karl,
eine Möglichkeit besteht darin, die Tabelleninhalte als Listbox darzustellen.
Nachfolgen ein Userform-Code-Beispiel.
Die Gestaltung und Datenquelle der Listbox werden mit den Parametern der
Call ResetListbox-Anweisung
in der Userform-Initialiserungsprozedur festgelegt.
Gruß
Franz
Option Explicit
Private wksSource As Worksheet
Private Sub ResetListbox(objListbox As Control, wksQuelle As Worksheet, _
Optional Spalte1 As Long = 1, Optional Zeile1 As Long = 2, _
Optional Spalte2 As Double = 0, Optional Zeile2 As Long = 0, _
Optional FaktorSpalte As Double = 8, _
Optional bolColumnHeads As Boolean = True, _
Optional lngListstyle As Long = 1, _
Optional lngMultiselect As Long = 0)
'Spalte1 = 1. Spalte des Quellblatts, die in Listbox angezeigt werden soll
'Zeile1  = 1. Zeile des Quellblatts, die in Listbox angezeigt werden soll
'Spalte2 = wenn <>0 dann ist dies die letzte Spalte die in Listbox _
angezeigt werden soll, bei 0 wird bis letzte Datenspalte angezeigt
'Zeile2  = wenn <>0 dann ist dies die letzte Zeile die in Listbox _
angezeigt werden soll, bei 0 wird bis letzte Datenzeile angezeigt
'FaktorSpalte: Rechnet die Spaltenbreiten der Tabelle in SpaltenBreiten für die Listbox um
'lngListstyle:    1 = mit Optionbuttons, 0 = einfach
'lngMultiselect:  0 = Einfachauswahl, 1 = Multiselect, 2 = Multiselect extended
Dim Spalte As Long, strColumnwidths As String, strRowSource As String
Dim dblWidth As Double
With wksQuelle
With .Cells.SpecialCells(xlCellTypeLastCell)
If Spalte2 = 0 Then Spalte2 = .Column
If Zeile2 = 0 Then Zeile2 = .Row
End With
strRowSource = "'" & .Name & "'!" & .Range(.Cells(Zeile1, Spalte1), _
.Cells(Zeile2, Spalte2)).Address
strColumnwidths = ""
dblWidth = 30
For Spalte = Spalte1 To Spalte2
If strColumnwidths = "" Then
strColumnwidths = .Columns(Spalte).ColumnWidth * FaktorSpalte & "Pt"
Else
strColumnwidths = strColumnwidths & ";" _
& .Columns(Spalte).ColumnWidth * FaktorSpalte & "Pt"
End If
dblWidth = dblWidth + .Columns(Spalte).ColumnWidth * FaktorSpalte
Next
End With
With objListbox
.Width = Application.WorksheetFunction.Min(Me.Width - .Left - 15, dblWidth)
'    .Width = Application.WorksheetFunction.Min(.Width, dblWidth)'
.ListStyle = lngListstyle
.MultiSelect = lngMultiselect
.ColumnWidths = strColumnwidths
.ColumnHeads = bolColumnHeads
.ColumnCount = Spalte2 - Spalte1 + 1
.RowSource = strRowSource
End With
Me.Repaint
End Sub
Private Sub UserForm_Initialize()
Set wksSource = Worksheets("Tabelle1") 'Quelltabelle der Daten
'Spalten 1 bis 3 der Tabelle1 ab Zeile 2 als Listbox-Quelle verwenden.
Call ResetListbox(objListbox:=Me.Controls("ListBox1"), wksQuelle:=wksSource, Spalte2:=3)
End Sub

Oder über Spreadsheet (oT)
Jens

AW: Oder über Spreadsheet (oT)
Karl

Hallo Franz, hallo Jens,
vielen Dank für Eure Antworten! Ich habe das gerade mal mit deinem Code versucht Franz, es wird aber leider nur eine leere UserForm angezeigt (trotz daten in Tabelle 1 im angegebenen Bereich). Um den Code aber zu verstehen und so umzubauen, dass es hinhaut, reichen meine VBA-Kenntnisse glaube ich leider nicht aus! :-(
Wie würde so etwas denn mit einem Spreadsheet laufen?
Gruß Karl
AW: Oder über Spreadsheet (oT)
Jens

Hallo Karl
Ein Spreadsheet ist ein optisches Abbild einer Tabelle/eines Tabellenausschnitts, welches in einer Userform dargestellt werden kann.
Auf diesem Gebiet bin ich aber auch nicht so firm.
Aber schau mal hier z.B.
http://www.office-loesung.de/ftopic300917_0_0_asc.php
oder such mal im Archiv nach "Spreadsheet"
Ich lasse die Frage aber noch offen, für andere, die sich einklinken wollen.
Gruß aus dem Sauerland
Jens
AW: Oder über Spreadsheet (oT)
fcs

Hallo Karl,
hier mal eine kleine Beispieldatei mit einer Listbox und noch ein bischen Spielkram extra.
https://www.herber.de/bbs/user/65894.xls
Den Sinn des Spreadsheets in einem Excel-Userform hab ich nie verstanden. Macht zumindest in Excel für mich keinen Sinn, da man ja die Spreadsheets im Programm selber hat. Außerdem schein dies Objekt ein Auslaufmodell zu sein. Jedenfalls hab ich es in Excel 2007 nicht mehr gefunden. Der Favorit scheint jetzt wohl Listview zu sein. Mit diesem Objekt kenne ich mich aber nicht aus.
Gruß
Franz
AW: Oder über Spreadsheet (oT)
Kalr

Hallo Franz, Hallo Jens,
vielen, vielen Dank nochmal. Ich habe jetzt die WebComponents installiert und bei Microsoft Office ... auch das Kreuzchen gesetzt. Bei der Datei 65894.xls bekomme ich aber immer die Fehlermeldung "Fehler beim Kompilieren: Projekt oder Bibliothek nicht gefunden". Die Anzeige steht auf "Mid". Scheinbar muss ich dafür auch wieder etwas installieren?
Gruß Karl
AW: VBA Modul fehlt/funktioniert nicht
fcs

Hallo Karl,
eigentlich sollte es funktionieren, wenn Excel/Office inklusive VBA installiert ist. Weitere Module sind dann nicht erforderlich, denn Mid ist eine der Funktionen, die VBA standardmäßig bereitstellt.
Leider weiß ich nicht genau, was man machen muss, um hier das fehlende Element wieder verfügbar zu machen, ohne gleich eine komplette Neuinstallation durchzuführen.
Gruß
Franz
AW: VBA Modul fehlt/funktioniert nicht
Karl

Hallo Franz,
der Rest von VBA funktioniert aber ordnungsgemäß! Ist jetzt aber auch nicht vorrangig. Das mit dem Spreadsheet haut jetzt gut hin.
Vielen Dank nochmal für die tolle Unterstützung!
Gruß Karl