Clever-Excel-Forum

Normale Version: Listenfeld mit Checkboxen Spalte einblenden
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo an Alle,

gibt es eine Möglichkeit mit einem Formulasteuerelementen (Listenfeld), mit Hilfe von Checkboxen Spalten ein und Ausblenden kann?

Hier ein Bsp:

(siehe Attachment)

Ich benötige also ein Listenfeld mit Checkboxen "Name", "Adresse", "Umsatz" und "Steuernummer". Wenn ich dann "Name" auswähle soll es die Spalte einblenden. Wenn ich "Name" abwähle soll es die Spalte "Name" wieder ausblenden. Und so auch für "Adresse", "Umsatz" und "Steuernummer" etc. etc. Gibt es da eine Möglichkeit?

Ich habe also einen Kunden und kann mir bspw. nur die Spalte Umsatz anzeigen lassen oder Umsatz und Adresse etc. (also auch Mehrfachauswahl.)

Vielen Dank

Grußformel
[attachment=11614]
Hallöchen,

wie man ein Listenfeld anlegt, weißt Du?
Du schreibst die Spaltennamen in der Reihenfolge der Spalten. Dazu kannst Du dann diesen Code nehmen:

Code:
Private Sub ListBox1_Change()
For i = 0 To ListBox1.ListCount - 1
     Columns(i + 1).EntireColumn.Hidden = ListBox1.Selected(i)
Next
End Sub

Der Code ist nun auf die Spalten ab A ausgerichtet --> i+1
Willst Du zum Anfang eine Spalte weiter rechts, musst Du entsprechend mehr addieren.
Hallo,

das ist mit Formularsteuerelement nicht einfach umzusetzen bzw. nicht möglich.

Deshalb unten ein Beispiel mit einer ActiveX Listbox.

Vorgaben:
1. Eine Tabelle mit Namen "Tabelle1"
2. in dieser Tabelle ist eine Listbox aus den ActiveX Steuerelementen eingefügt und heißt: "ListBox1"
3. in dieser Tabelle stehen die Überschriften in Zeile 1 ab Spalte 1


Code hinter DieseArbeitsmappe:

Code:
Private Sub Workbook_Open()
 Lisbox_füllen
End Sub


Code in einem allgemeinen Modul:

Code:
Public boVar As Boolean

Sub Lisbox_füllen()
Dim i As Long
With Worksheets("Tabelle1").ListBox1
 .ListStyle = 1
 .MultiSelect = 1
 .Placement = 3
 boVar = True
 .Clear
 .AddItem "alle einblenden"
 For i = 1 To Worksheets("Tabelle1").Cells(1, 1).CurrentRegion.Columns.Count
   .AddItem Worksheets("Tabelle1").Cells(1, i)
 Next i
 boVar = False
End With
End Sub



Code hinter der Tabelle, in der die Listbox eingefügt ist:


Code:
Private Sub ListBox1_Change()
 Dim i As Long
 
 If boVar = False Then
   With Me.ListBox1
     If .ListIndex > -1 Then
       boVar = True
       Application.ScreenUpdating = False
       Me.Columns("A:D").Hidden = True
       If .Selected(0) Then
         Me.Columns.EntireColumn.Hidden = False
         For i = 1 To Me.ListBox1.ListCount - 1
           .Selected(i) = False
         Next i
       Else
         For i = 1 To Me.ListBox1.ListCount - 1
           If .Selected(i) = True Then Me.Columns(i).EntireColumn.Hidden = False
         Next i
       End If
       Application.Goto Cells(1, 1), True
       Application.ScreenUpdating = True
       boVar = False
     End If
   End With
 End If

End Sub


Und hier die Beispielmappe:  [attachment=11625]
Hallöchen,

habe gerade gemerkt, dass Du die selektierten Spalten sichtbar haben willst. Dann reicht mein minimaler Code nicht.

Hier noch die Ergänzungen.
Code im Tabellenblattmodul:
Code:
Private Sub ListBox1_Change()
If Me.ListBox1.Enabled = False Then Exit Sub
For i = 0 To ListBox1.ListCount - 1
  Columns(i + 1).EntireColumn.Hidden = Not (ListBox1.Selected(i))
Next
End Sub
Code in DieseArbeitsmappe:
Code:
Private Sub Workbook_Open()
With Tabelle1.ListBox1
  .Enabled = False
  For i = 0 To .ListCount - 1
    .Selected(i) = Not (Tabelle1.Columns(i + 1).EntireColumn.Hidden)
   Next
  .Enabled = True
End With
End Sub

Weitere Voraussetzungen:

- bei anderer Tabelle als Tabelle1 (Codename, nicht unbedingt identisch mit Blattname) entsprechend ändern
--> Codename siehe Projektexplorer, z.B. Tabelle1 (MeineErsteTabelle)
--> Blattname steht in Klammern, Codename davor
- Code reagiert nicht auf manuelles Ausblenden von Spalten, man sollte es also nur mit der Listbox tun
- Listbox wird über ListFillRange gefüllt, nicht über Code wie bei Atilla
--> Du musst also irgendwo nochmal die Überschriften platzieren
Super! 1000 Dank schon mal für deine Hilfe! Ich werde das sobald ich Zeit finde ausprobieren!!!
Hallo nochmal,

Eine Frage habe ich doch noch. Besteht die Möglichkeit dass der Benutzer der Tabelle, ohne im Entwicklermodus zu sein, die ListBox per Drag and Drop verschieben kann?
Hintergrund ist, dass die Tabelle ziemlich groß wird. Man kann ja bereits irrelevante Spalten per CheckBox aus- und einblenden. Ich weiß aber nun nicht genau wo ich die ListBox am besten hinpacken soll ohne dass sie dem Nutzer beim lesen der Daten im Weg ist. Deswegen wäre es am Besten wenn man Sie einfach frei dort hinziehen könnte wo sie nicht stört..


Vielen Dank schon mal.

Grüße

Martin
Hallo,

das geht mit ActiveX Steuerelementen nicht aber mit Userformen

schau mal:

[attachment=11695]
Hallo Murdock,

eventuell hast Du oben einen fixierten Bereich oder kannst einen anlegen, wo Du die Box weniger störend platzieren kannst.

Eine alternative wäre noch, die Box bei irgendwelchen Aktionen automatisch zu verschieben. Z.B. könnte man sie immer über eine zelle einer bestimmten Spalte platzieren, wenn man dort reinklickt.