Excel vba Listbox mit Daten auf allen Blättern
#1
Hallo zusammen,

ich knabbere wieder mal an einem Thema bei dem ich nicht so recht weiterkomme. Vielleicht könnt Ihr mir wieder mal helfen.

In einer Arbeitsmappe mit 20 Blättern wird auf dem Blatt "Contents" in eine TextBox alle restlichen Namen der Blätter eingelesen. Die Textbox ist direkt auf dem Tabellenblatt und nicht in einer Userform. Mit Klick auf einen Blattnamen in der Textbox wird das entsprechende Blatt angezeigt.

Meine Idee ist nun, dass diese Textbox mit ihrem bereits eingelesenem Inhalt auch wieder auf diesem Blatt angezeigt wird. Und das immer wenn ein neu anzuzeigendes Blatt gewählt wird.
Die Textbox sollte sozusagen immer mitwandern und auf dem aktuellen Blatt angezeigt werden. Quasi ein mitwanderndes Inhaltsverzeichnis.

Geht das überhaupt? Wenn ja wie könnte man dies vba-technisch realisieren?

Freu mich auf einen Vorschlag.
Top
#2
Hallo,

warum kein UserForm?
Viele Grüße
Klaus-Dieter
Der Erfolg hat viele Väter, 
der Misserfolg ist ein Waisenkind
Richard Cobden
Top
#3
Hi

Welchen Vorteil versprichst du dir davon?
Ein Rechtsklick auf die Pfeile unten links für die Blattnavigation ist doch viel einfacher.

Gruß Elex
Top
#4
Klaus-Dieter,

Textbox kann natürlich auch in einer Userform sein.

Hätte kein Problem damit, Hauptsache es würde so funktionieren wie ich mir das vorgestellt habe.

Macht man das nicht...nur Textbox auf Tabellenblatt?

Hallo Elex,

Dein Vorschlag würde auch gehen.

Die Datei wird, bitte nicht falsch verstehen, nicht nur von Excelkennern verwendet.
Die Handhabung soll einfach durch plakative Darstellung vereinfacht werden und sie wäre meines Erachtens auch schneller.
Ist meine persönliche Meinung die nicht repräsentativ ist.
Top
#5
Hallo,

habe dir eine Beispieldatei erstellt.


Angehängte Dateien
.xlsm   Blattauswahl über Textbox.xlsm (Größe: 16,56 KB / Downloads: 6)
Viele Grüße
Klaus-Dieter
Der Erfolg hat viele Väter, 
der Misserfolg ist ein Waisenkind
Richard Cobden
[-] Folgende(r) 1 Nutzer sagt Danke an Klaus-Dieter für diesen Beitrag:
  • sharky51
Top
#6
Hallo Klaus-Dieter,

cool ... genau so habe ich mir das vorgestellt, genial.

Wenn ich dazu noch ne Frage habe würde ich mich gerne nochmals melden.

Herzlichen Dank!
Top
#7
Hallo,

immer gerne.
Viele Grüße
Klaus-Dieter
Der Erfolg hat viele Väter, 
der Misserfolg ist ein Waisenkind
Richard Cobden
[-] Folgende(r) 1 Nutzer sagt Danke an Klaus-Dieter für diesen Beitrag:
  • sharky51
Top
#8
Hallo zusammen,

darf ich Euch nochmals zu dem Thema um Hilfe bitten?

In meinem Workbook sind viele Tabellen enthalten deren Namen dann in eine Listbox eingelesen werden.
Einige Tabellen will ich aber in der Listbox nicht sehen, quasi ausblenden.

Mit den folgenden Code ist das so gelöst:

Code:
Sub ListBox_Einlesen()
  'ListBox mit Tabellenblätter füllen
  Dim wks As Worksheet
  Tabelle1.lstWks.Clear
  For Each wks In Worksheets
      If wks.Name <> "Contents" And wks.Name <> "Muster" _
        And wks.Name <> "next" And wks.Name <> "Info" Then
        Tabelle1.lstWks.AddItem wks.Name
      End If
  Next wks
End Sub

Wenn jetzt mehrere neue Blätter hinzukommen und davon auch einige nicht in der Listbox angezeigt werden sollen, muss ich jedes Mal den Source-Code bearbeiten. Das ist lästig und nicht Benutzerfreundlich!
Meine Idee ist jetzt auf dem Tabellenblatt, wo die Listbox eingeblendet ist, in einem benannten Bereich z.B. "GoToEnd", die Tabellennamen einzutragen die ich nicht in der Listbox sehen möchte.

Also: Die Tabellenblattnamen Contents, Muster, next, Info usw. werden im Zell-Bereich "GoToEnd" aufgelistet und sollen dann beim Befüllen der Listbox nicht berücksichtigt werden.
So könnte man(n) schnell die Arbeitsmappe Konfigurieren.

Wie müsste der code dahingehend geändert werden?

Ein Lösungsvorschlag wäre schön!
Top
#9
Hallo Erich,

dann machst du das so:

Code:
Private Sub UserForm_Initialize()
    Dim intAnz As Integer
    Dim varBlattName As Variant
    varBlattName = Array("Testblatt1", "Testblatt2")
    For intAnz = 0 To UBound(varBlattName)
        With ListBox1
            .AddItem varBlattName(intAnz)
        End With
    Next intAnz
End Sub

Anstelle von Testblatt1 und Testblatt2 trägst du deine Blattnamen in das Array ein. Dann werden alle anderen Blätter nicht gelistet.
Viele Grüße
Klaus-Dieter
Der Erfolg hat viele Väter, 
der Misserfolg ist ein Waisenkind
Richard Cobden
[-] Folgende(r) 1 Nutzer sagt Danke an Klaus-Dieter für diesen Beitrag:
  • sharky51
Top
#10
Hallo Erich,

teste mal so:
Private Sub UserForm_Initialize()
Dim oWs As Worksheet
Dim varAusschluss As Variant
varAusschluss = Range("GoToEnd").Value
For Each oWs In Worksheets
If IsError(Application.Match(oWs.Name, varAusschluss, 0)) Then
ListBox1.AddItem oWs.Name
End If
Next oWs
End Sub
Gruß Uwe

Hi Klaus,

Dein Vorschlag ließe sich so zusammenfassen: Wink
Private Sub UserForm_Initialize()
ListBox1.List = Array("Testblatt1", "Testblatt2")
End Sub
Gruß Uwe
[-] Folgende(r) 1 Nutzer sagt Danke an Kuwer für diesen Beitrag:
  • sharky51
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste