[Excel] VBA: Tabstrip - Event soll Listbox füllen bzw. Inhalt austauschen

amn.ssy

Erfahrenes Mitglied
Hallo,

für ein Project in dem ich bereits externe Exceldateien über ADO in eine Listbox einlese experementiere ich gerade mit dem Tabstrip-Control.
Ein Teilziel, nämlich die Namen der Sheets als Tabs anzuzeigen habe ich bereits realisiert.
In der Listbox den Inhalt der ersten Tabelle anzeigen geht auch.
Wie erreiche ich, daß der Inhalt der Listbox gelöscht wird und der Inhalt von Tabelle 2 oder was auch immer ausgewählt wurde angezeigt wird wenn ich den "Reiter" wechsle?
Mein erster Ansatz (auf der Basis des aktiven Workbook) sieht so aus:
Visual Basic:
Option Explicit
Dim sTab As String

Private Sub UserForm_Initialize()
Dim n As Long

For n = 1 To ActiveWorkbook.Sheets.Count
    TabStrip1.Tabs.Add
    TabStrip1.Tabs(n - 1).Caption = ActiveWorkbook.Sheets(n).Name
Next n

TabStrip1.Value = 0
sTab = TabStrip1.SelectedItem.Caption
fillbox

End Sub

Private Sub fillbox()
Dim letzteZeile As String

letzteZeile = Cells(Rows.Count, 1).End(xlUp).Row

    With ListBox1
        .ColumnCount = 3
        .ColumnWidths = "2cm;2cm;2cm"
        .ColumnHeads = False
    ListBox1.RowSource = sTab & "!A1:Z" & letzteZeile
    End With

End Sub

Private Sub TabStrip1_Change()
sTab = TabStrip1.SelectedItem.Caption
ListBox1.RowSource = ""
fillbox
End Sub

Die Schleife wird im übrigen nicht durchlaufen sonder er springt direkt wieder raus ins "_Change()".
Von dort bekommt er die "Registerkarte6", die natürlich nicht existiert.
Zu Beginn existiert noch gar kein Tab, da ja auch noch nicht klar ist wie die Tabellen heißen.

Gruß

_opiWahn_
 
hallo Zvoni,

vielen Dank für den Hinweis, jedoch gibt es für TabStrip unter VBA (Excel 2010) nur das Change -Ereignis.
Was mich irritiert ist, daß er in UserForm_Initialize() innerhalb der For-Schleife schon direkt auf das Change-Event springt. An dieser Stelle hat er jedoch noch nicht die Namen der Tabellen eingelesen bzw. als TABs gesetzt.
Ich weiß, daß MultiPage einfacher sein soll als TapStrip, wenn ich das Teil im Projekt implementiere weiß ich jedoch nicht aus wievielen Tabellen das Workbook besteht.
Daher kommt m.E. eben nur TabStrip in Betracht, da ich sonst bei einer MultiPage bei jedem dynamischen Erzeugen eines TABs gleich noch dynmisch eine Listbox einfügen muß.
Final möchte ich in meinem Projekt ein "Viewer" nachbauen.
D.h. in Listbox_A werden die Exceldateien eines Verzeichnisses dagestellt, beim Klick auf eine Datei wird der Inhalt über ADO-Connection in einer Listbox_B dargestellt.
Bis dahin funktioniert das schon :-) jedoch nur mit der ersten Tabelle :-(
Nachdem ich nun auch schon korrekt die jeweiligen Tabellennamen der Datei als TABs darstellen kann, sollte es doch möglich sein, beim Klick auf den jeweiligen TAB den Inhalt der Listbox gg. die Daten der entsprechenden Tabelle zu tauschen.

Grüße
_opiWahn_
 
Zuletzt bearbeitet:
Wie kommst du da drauf, dass nur das Change-Event verfügbar ist? Ich habe auch Excel 2010, und da ist definitiv das Click-Event drin
 
Hallo Zvoni,

hab ich jedenfalls in verschiedenen Forenbeiträge so gelesen ,aber trotzdem auch ausprobiert.
Ein "Private Sub TabStrip1_Click()" wir mit einen Kompilierungsfehler quittiert wonach die Deklaration der Prozedur nicht der Beschreibung eines Ereignisses entspricht.

Grüße
_opiWahn_
 
So geht es jetzt:
Visual Basic:
Option Explicit
Dim sTab As String

Private Sub UserForm_Initialize()
    Dim n As Long
    For n = 1 To ActiveWorkbook.Sheets.Count
        TabStrip1.Tabs.Add (ActiveWorkbook.Sheets(n).Name)
    Next
End Sub

Private Sub fillbox()
Dim letzteZeile As String

letzteZeile = ActiveWorkbook.Sheets(sTab).Cells(Rows.Count, 1).End(xlUp).Row

    With ListBox1
        .ColumnCount = 3
        .ColumnWidths = "2cm;2cm;2cm"
        .ColumnHeads = False
        .RowSource = sTab & "!A1:Z" & letzteZeile
    End With

End Sub

Private Sub TabStrip1_Change()
sTab = TabStrip1.SelectedItem.Caption
fillbox
End Sub

Grüße
_opiWahn_
 

Neue Beiträge

Zurück