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.