Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
748to752
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
748to752
748to752
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Listbox Problem (VBA)

Listbox Problem (VBA)
04.04.2006 10:10:24
Fab
Hallo,
ich hatte keine Ahnung, wie ich das genauer beschreiben soll...
(dreht sich wieder um mein Stadionproblem...)
Also:
Ich habe drei Listboxen, die eine zeigt mir Stadien an, die zweite Jahreszahlen und die dritte die jeweiligen Datenrubriken (Zuschauer, Durchschnitt, etc.)
Alle drei funktionieren mittels multiselect extended.
Was ich bisher geschafft habe:
https://www.herber.de/bbs/user/32586.xls
Nun möchte ich, dass wenn ich zwei Jahre auswähle, diese pro Stadion angezeigt werden und in der Zeile darunter nebeneinander dargestellt werden. Wenn nur eins ausgewählt wird, soll es direkt unter dem Namen auftauchen. Dann sollen aber alle Stadien direkt nebeneinander stehen.
Dormund München Stuttgart
2001 2002 2003 2001 2002 2003 2001 2002 2003
bzw.
Dortmund München Stuttgart
2001 2001 2001
Wie schaffe ich es, die Zeilen auszublenden, wenn sie nicht gefüllt sind? Und wie kann ich die Buttons fixieren, so dass sie sich nicht beim Ausblenden der Zeilen übereinander legen? Die bisherige Lösung gefällt mir da nicht so gut.
Hoffe ihr könnt mir weiter helfen.
Gruß,
Fab aus dem regnerischen Norden

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Listbox Problem (VBA)
04.04.2006 11:40:26
Ralf
Hallo Fab,
sehe mir nur in gaaanz dringenden Fällen die beigefügten Tabellen an. Aber so aus dem Bauch heraus.
Bau Dir eine verschachtelte For-Schleife. Bsp. (für eine Schleife) wo und wie das geht:

Private Sub ListBox1_Change()
For x = 0 To ListBox1.ListCount - 1
If ListBox1.Selected(x) Then MsgBox ListBox1.List(x)
Next x
End Sub

Wenn also der gewünschte Eintrag selektiert wurde, dann nur noch rein mit Deinen Befehlen.
Die Spaltenbreite anpassen geht z. Bsp. so: Range("A1:E1").Columns.AutoFit
Boxen fixieren so: Im Entwurfsmodus das Steuerelement markieren, rechter Mausklick, auf 'Steuerelement formatieren...' klicken und im Register 'Eigenschaften' die Checkbox 'Von Zellposition und -größe abhängig' aktivieren.
Ich hoffe, Du kommst mit dem Rest klar.
Ciao, Ralf
Anzeige
AW: Listbox Problem (VBA)
04.04.2006 14:00:35
Fab
Hallo,
hilft mir ein wenig weiter, zumindest das mit den Buttons...
colums.autofit passt leider nur Spalten, in denen etwas steht, an. Bei mir müßten aber die leeren Spalten ausgeblendet werden.
in etwa: If a1 or a2 or a3 etc. = empty then
entirerow.hidden=true
Nach wie vor habe ich folgendes Problem:
Ich möchte die Jahreszahlen nebeneinander in Zeile 10 ausgegeben haben, sie sollen sich aber pro Stadionname wiederholen.
Ich habe also unter Dormund in den Spalten B-E 2001-2004, unter München in den Zeilen F-I etc.
Wenn ich nur zwei Jahre möchte, wird das in den Spalten BC für Dortmund, DE, für München etc. ausgegeben...
vielleicht hilft die Beschreibung weiter?
Ich habe schon schleifen, die mir die jeweiligen Inhalte der Listboxes auswerfen, aber für die Jahre eben nicht mit der obigen Beschränkung
Gruß :-)
Anzeige
AW: Listbox Problem (VBA)
04.04.2006 16:24:08
Ralf
Hi Fab,
wozu Excel so alles mißbraucht werden kann? Für Fussball... tztztz...:-)
So, wie Du das beschreibst, geht das nicht. Wenn Du mehrere Bedingungen prüfen willst, musst Du die komplette Bedingung immer wieder formulieren. Bsp.:
If [A1] = "" Or [B1] = "" And [C1] = "".... Then
Dabei gilt, And geht vor Or geht vor... (sh. Hilfe). Es sei denn, Du setzt Klammern.
In Deinem Fall ist das aber nicht die Lösung. Du müsstest die Zellen einzeln prüfen. Also:
If If [B1] = "" Then Columns("B:B").EntireColumn.Hidden = True
If If [C1] = "" Then Columns("C:C").ColumnWidth = 0
Hat beides den gleichen Effekt. Spalte ist nicht zu sehen.
Für den Rest: Ich nehme an, Du wählst erst die Stadien aus und dann die Jahreszahlen. Also brauchst Du in der Stadienlistbox keinen Code. In der Jahreslistbox rufst Du im Change Ereignis eine benutzerdefinierte Funktion auf. In die schreibst Du dann was passieren soll. Die könnte 'Schreibe_Daten' heißen. Bsp.:


Private Sub ListBoxJahre_Change()
Schreibe_Daten
End Sub
Sub Schreibe_Daten()
Dim x%, y%, z%
    With Sheets("Tabelle1")
        'Stadien durchlaufen
        For x = 0 To ListBoxStadien.ListCount - 1
            'Jahre durchlaufen
            For y = 0 To ListBoxJahre.ListCount - 1
                'wenn Stadion x ausgewählt wurde...
                If ListBoxStadien.Selected(x) Then
                '...in Zeile 10 dessen Namen schreiben
                .Cells(10, z + 1) = ListBoxStadien.List(x)
                'wenn das Jahr y ausgewählt wurde...
                    If ListBoxJahre.Selected(y) Then
                    'das Jahr in Zeile 11, nächste Spalte schreiben
                        .Cells(11, z + 1) = ListBoxJahre.List(y)
                        z = z + 1 '(Spaltenzähler zum Schreiben)
                    End If
                End If
            Next y
        Next x
    End With
End Sub


Musst Du Dir aber noch Deinen Bedürfnissen anpassen.
Ciao, Ralf
Anzeige
AW: Listbox Problem (VBA)
04.04.2006 16:35:17
Fab
Danke, das werd ich erstmal zu Hause testen und in ca. 2 stunden noch mal ne Antwort schreiben, ob es die Lösung war, die ich suche :)
Vielen Dank für deine Mühen.
Gruß
Fab
AW: Listbox Problem (VBA)
05.04.2006 10:27:31
Fab
Hey und Guten Morgen,
hab das gestern leider nicht mehr geschafft.
Leider funktioniert dein Code nicht. Auch nach anpassen zeigt er mir in der ersten Zeile For x = 0 to Listbox1.Listcount -1
Objekt erforderlich....
woran kann sowas liegen?
Listbox heißt Listbox1... Tabellenblatt richtig benannt...
Gruß,
Fab
AW: Listbox Problem (VBA)
05.04.2006 13:35:53
Ralf
Hi Fab,
in dieser Zeile gibt es nur ein Objekt. Listbox1. Aber, wenn das Change Ereignis der 2. Listbox ausgeführt wird und die With Anweisung ebenfalls, dann muss es am Namen der 1. Listbox liegen. Es sei denn, die befindet sich woanders. Anderes Formular, anderes Tabellenblatt. In dem Fall musst Du den Standort voransetzen. Bsp.:
Sheets("Tab2").Listbox1.Listcount - 1.
Sollte es weder am Namen noch am Standort liegen probiere folgendes. Doppelklicke im Entwurfsmodus mal auf die Listbox1. Rufe im Change Ereignis ebenfalls 'Daten_schreiben' auf. Sollte das auch nicht funktionieren, lösche die Listbox und erstelle eine neue.
Ich hab den Code nochmal bei mir getestet. Läuft 1A. Anbei mal eine etwas ausgefeiltere Version.


Sub Schreibe_Daten()
Dim x%, y%, z%, a%
    With Sheets("Tabelle1")
        .Rows("10:11").Delete xlUp
        'Stadien durchlaufen
        For x = 0 To ListBoxStadien.ListCount - 1
            'Jahre durchlaufen
            For y = 0 To ListBoxJahre.ListCount - 1
                'wenn Stadion x ausgewählt wurde...
                If ListBoxStadien.Selected(x) Then
                '...in Zeile 10 dessen Namen schreiben
                If a = 0 Then .Cells(10, z + 1) = ListBoxStadien.List(x)
                'wenn das Jahr y ausgewählt wurde...
                a = a + 1 'Stadienname soll nur 1 x geschrieben werden
                    If ListBoxJahre.Selected(y) Then
                    'das Jahr in Zeile 11, nächste Spalte schreiben
                        .Cells(11, z + 1) = ListBoxJahre.List(y)
                        z = z + 1 '(Spaltenzähler zum Schreiben)
                    End If
                Else
                    Exit For
                End If
            Next y
        a = 0
        Next x
        .Columns("A:" & Chr(z + 66)).EntireColumn.AutoFit
    End With
End Sub


Ciao, Ralf
Anzeige
AW: Listbox Problem (VBA)
05.04.2006 14:53:46
Fab
Ich hab den Text kopiert, in einer neuen Excel.datei zwei Listboxes erstellt, die eine ListboxStadien und die andere Listboxjahre genannt.
Nach wie vor der gleich Fehler...
www.herber.de/bbs/user/32614.xls falls du mal nachschauen magst. Neue Datei, nix anderes als zwei Listboxen und dein Code...
komisch,
Gruß Fab
AW: Listbox Problem (VBA)
05.04.2006 21:05:38
Fab
Du benutzt eine userform, ich aber nicht.
Ich habe auf meinem Tabellenblatt1 die drei Listboxen, die sich die Daten von Tabellenblatt 2 ziehen. (Listfillrange...)
Kann man deinen Code darauf anpassen?
Oder wie schaffe ich es, das die Listboxen die Namen aus der Liste in Tabelle2 ziehen?
Gruß und danke,
Fabian
Anzeige
AW: Listbox Problem (VBA)
05.04.2006 21:58:06
Ralf
sorry, aber Du scheinst meine Antworten nicht zu lesen. Es macht keinen Unterschied ob Du die Listbox im Formular oder in der Tabelle benutzt. Listcount kennen beide. Wenn Du den Code nicht im Tabellenmodul hast, musst Du den Standort angeben.
Sheets("Tab2").Listbox1.Listcount - 1.
Das hatte ich Dir aber schon gesagt.
Was ich aber eher vermute, Du benutzt nicht die Listboxen aus der Toolbox, sondern aus dem Menü 'Daten - Gültigkeit'. Weil ich die Dinger nie benutze kann ich Dir da auch nicht weiterhelfen. Kann man die überhaupt ansprechen?¿? Ich kann Dir nur empfehlen, die Dinger rauszuschmeissen und 'ordentliche' Boxen zu benutzen. Wie die gefüllt werden können siehst Du ja im Beispiel.
Hier nochmal für Tabellen: (Wenn die Stadien in Tabelle2 in Spalte A in den Zeilen 2 bis 20 stehen und die Box in Tabelle1)
************************************************************************
with Sheets("Tabelle2")
For x = 2 to 20
sheets("Tabelle1").ListboxStadien.Additem .range("A" & x)
next x
end with
***********************************************************************
Vorher die Listbox noch leeren (mit claer - sh. ebenfalls Bsp.)
Ciao, Ralf
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige